Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP函数_uautoload()_Php - Fatal编程技术网

PHP函数_uautoload()

PHP函数_uautoload(),php,Php,好吧,在这个问题上,我可能是个十足的白痴。但是uu autoload函数在php中究竟是如何工作的呢?我从来没能让它工作,也找不到一个好的教程来解释这个函数是如何工作的 当您引用一个php不知道其定义的类时,会调用_autoload函数。必须定义如何在uu autoload函数中加载此类定义的逻辑。举例如下 function __autoload($classname) { $filename = "./". $classname .".php"; include_once($f

好吧,在这个问题上,我可能是个十足的白痴。但是uu autoload函数在php中究竟是如何工作的呢?我从来没能让它工作,也找不到一个好的教程来解释这个函数是如何工作的

当您引用一个php不知道其定义的类时,会调用_autoload函数。必须定义如何在uu 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将任何函数注册为自动加载函数,将其用作自动加载函数

还可以通过在找不到类定义时返回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'));

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

例如,假设我有代码正在创建一个新的Foo对象,但我没有定义Foo类

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

一个有效的自动加载函数将知道定义所请求类的文件在哪里,并将包含所需的文件-这样当它返回时,类现在就被定义了


一种常见的自动加载方案是用目录分隔符替换类名中的下划线u,以便加载正确的文件。因此,My_Foo_类将在文件My/Foo/class.php中定义。

好了:我已经通读了,它对我没有什么帮助。因为我已经关注了PHP.net文档,仍然无法让它工作
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'));