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