__autoload()会进入主类吗?

时间:2011-01-26 16:51:03

标签: php oop class-design methodology

我是新上课的,如果这是一个邪恶的菜鸟问题,那就很抱歉。

JMC是我的主要课程。其他类的名称如JMC_filesJMC_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 (){
}

1 个答案:

答案 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课听起来像是一个合理的地方;我的框架的自动加载方法也存在于主类中。