在一个类中包含文件?

时间:2013-09-02 01:51:05

标签: php oop dependencies

我的主要类定义如下:

class Admin {

    private $theme_name;

    function __construct($theme_name) {
        $this->theme_name = $theme_name;
        $this->init();
    }

    private function init(){
        // load the framework files

    }


}

实例化此类将加载所有单个模块类,并实例化它们。

我的问题是,我是否应该在init方法中包含必要的文件,如下所示:

private function init(){
        // load the framework files
        require_once ( 'interface.php' );
        require_once ( 'uploader.php' );
        //etc ..

        $interface = new Interface(); //etc..

}

或者,我应该将它们包含在类声明之上,如下所示:

require_once ( 'interface.php' );
require_once ( 'uploader.php' );
class Admin { //etc..

在类中包含依赖项的最佳方法是什么?

5 个答案:

答案 0 :(得分:1)

在您的情况下,由于所有Admin个实例都需要这些附加文件,因此将这些require_once语句提取到文件顶部是有意义的。

话虽如此,如果你有一个类自动加载器,你可以更清理文件。您注册了一个函数spl_autoload_register(),当尚未加载所需的类时将调用该函数;该函数将查找并加载必要的源文件。

答案 1 :(得分:0)

两者都很好,但是第二个更好,它使代码更美观。

我建议您将init()方法更改为static,因为这不是管理员的行为,并且每次要包含这些文件时都要避免实例化管理对象。

答案 2 :(得分:0)

他们都是一样的。我会将它们包括在课外,以保持更好的代码清洁度,从技术上讲,每次调用函数时都会调用包含,但在这种情况下它是init所以听起来它只能被调用一次

答案 3 :(得分:0)

自动加载!它有点价格(有很多字符串工作要做,这将增加负载)但如果你只需要一对,它应该很好地完成工作

http://www.sitepoint.com/autoloading-and-the-psr-0-standard/

答案 4 :(得分:0)

您可以使用__autoload()函数仅引入需要调用的类。

<?php
function __autoload($class_name)
{
   $filename = "../class/".$class_name."php";
   if ( file_exists($filename) )
   {
       include_once $filename;
   }
}

?>