我的主要类定义如下:
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..
在类中包含依赖项的最佳方法是什么?
答案 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;
}
}
?>