0

我的主类定义如下:

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..

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

4

5 回答 5

1

在您的情况下,因为所有实例都需要这些附加文件,所以将这些语句拉到文件顶部是Admin有意义的。require_once

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

于 2013-09-02T05:13:12.677 回答
0

两者都很好,但第二个更好,它使代码更漂亮。

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

于 2013-09-02T01:53:38.887 回答
0

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

于 2013-09-02T01:55:04.760 回答
0

自动加载!它有点贵(有很多字符串工作要做,这会增加负载)但如果你只需要几个,它应该可以很好地完成工作

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

于 2013-09-02T01:56:31.913 回答
0

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

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

?>
于 2013-09-02T02:34:10.870 回答