PHP函数__Autoload()

时间:2013-07-05 23:19:36

标签: php

好吧,我可能会成为这个问题的完全和完全白痴。但__autoload函数究竟是如何在php中运行的呢?我从来没有能够让它工作,也找不到一个很好的教程解释所述功能如何工作。

2 个答案:

答案 0 :(得分:3)

当你引用一个php未知定义的类时,会调用__autoload函数。您必须在__autoload函数中定义如何加载此类定义的逻辑。例如如下。

function __autoload($classname) {
    $filename = "./". $classname .".php";
    include_once($filename);
}

//when you say $a = new someclass(); autoload gets called with $classname = "someclass"

或者,您可以使用spl_autoload_register将该功能注册为自动加载功能,从而将任何功能用作自动加载功能。

function my_autoloader($class) {
    include 'classes/' . $class . '.class.php';
}

spl_autoload_register('my_autoloader');

你也可以链接自动加载函数,在未找到类定义时返回false spl_autoload_register将调用链中的下一个函数。

function my_autoloader1($class) {
    $file = 'classes1/' . $class . '.class.php';
    if (!is_file($file)) return false;
    include $file;
}

function my_autoloader2($class) {
    include 'classes2/' . $class . '.class.php';
}

spl_autoload_register(array('my_autoloader1', 'my_autoloader2'));

答案 1 :(得分:3)

基本上,它为您提供了按需加载类定义的机会。

例如,假设我有创建新Foo对象的代码 - 但我没有定义Foo类。

在PHP放弃并生成错误之前,它会调用__autoload('Foo')。如果Foo函数完成后仍未定义__autoload()类,则会生成错误。

一个有效的__autoload()函数将知道文件在哪里定义所请求的类,并且include()将需要的文件 - 这样当它返回时,现在定义了类。

常见的自动加载方案是使用目录分隔符替换类名中的下划线(_),以便加载正确的文件。因此,类My_Foo_Class将在文件"My/Foo/Class.php"中定义。