答案 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"
中定义。