我是新上课的,如果这是一个邪恶的菜鸟问题,那就很抱歉。
JMC
是我的主要课程。其他类的名称如JMC_files
或JMC_array
。我想使用自动加载。自动加载功能是在我的主类里面在外面吗?所以对于视觉,我应该这样做:
class JMC {
function __autoload($className) {
include_once($className.'.php');
}
protected function foo() { }
}
class JMC_files extends JMC (){
}
或者这个:
function __autoload($className) {
include_once($className.'.php');
}
class JMC {
protected function foo() { }
}
class JMC_files extends JMC (){
}
答案 0 :(得分:5)
__autoload()
是一个魔术函数的名称,当您尝试引用userland中尚不存在的类时,默认情况下会自动调用该函数。它是一个函数,而不是类方法,因此您可以这样定义它:
function __autoload($className) {
include_once($className.'.php');
}
如果您愿意,可以使用spl_autoload_register()
设置自己的自动加载处理程序(可以是函数或类方法)。例如,如果您想为主JMC
类提供一个处理类文件自动加载的静态autoload()
方法,您可以执行以下操作:
class JMC {
public static function autoload($className) {
include_once($className.'.php');
}
protected function foo() {}
}
spl_autoload_register('JMC::autoload');
// By referencing this class, if it doesn't yet exist then JMC's autoload()
// gets called and PHP will attempt to load JMC_files.php to look for this class
$files = new JMC_files();
$files->foo();
您要放置自动加载功能的位置取决于您。你的主JMC
课听起来像是一个合理的地方;我的框架的自动加载方法也存在于主类中。