Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在类中包含文件?_Php_Oop_Dependencies - Fatal编程技术网

Php 在类中包含文件?

Php 在类中包含文件?,php,oop,dependencies,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 } } 实例化这个

我的主类定义如下:

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

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

两者都很好,但第二种方法更好,它使代码更漂亮


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

它们都是相同的。虽然我会在类外包含它们,以保持更好的代码清洁度,从技术上讲,每次调用函数时都会调用include,但在这种情况下,它是一个
init
,因此听起来它可能只被调用一次。

自动加载!它的价格有点高(有很多字符串工作要做,这会增加加载),但是如果您只需要几次,它应该可以很好地完成这项工作

您可以使用_autoload()函数只拉入需要调用的类

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

?>

在您的情况下,因为所有的
Admin
实例都需要这些额外的文件,所以有必要将这些
require\u语句拉到文件的顶部

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