-1

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

4

2 回答 2

3

__autoload 函数在您引用 php 未知定义的类时被调用。__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');

您还可以链接自动加载函数,当找不到类定义时返回 falsespl_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'));
于 2013-07-05T23:22:49.310 回答
3

基本上,它使您有机会按需加载类定义。

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

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

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

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

于 2013-07-05T23:25:42.690 回答