【问题标题】:Including files within a class?在一个类中包含文件?
【发布时间】:2013-09-02 13:13:12
【问题描述】:

我的主类是这样定义的:

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

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

【问题讨论】:

    标签: php oop dependencies


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            【解决方案5】:

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-06-29
              • 1970-01-01
              • 1970-01-01
              • 2020-01-20
              • 2010-11-20
              • 1970-01-01
              相关资源
              最近更新 更多