Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.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自动加载程序不工作_Php_Php 5.3 - Fatal编程技术网

PHP自动加载程序不工作

PHP自动加载程序不工作,php,php-5.3,Php,Php 5.3,我似乎对PHP中自动加载的工作原理有一些误解,我无法解释 我有一个名为glue的类,它的主函数中有一个spl_autoload_寄存器,这里称为run like so: 自动加载功能通过PSR-0标准加载工作,并从绝对路径工作。这是所有测试工作等注意,胶水是没有名称空间 autoload函数包含一个名为glue的名称空间。在这个名称空间中,我有一个名为\glue\ErrorHandler的错误处理程序 当我触发一个错误时,glue类将根据PSR-0符号从根目录自动加载\glue\ErrorHan

我似乎对PHP中自动加载的工作原理有一些误解,我无法解释

我有一个名为glue的类,它的主函数中有一个spl_autoload_寄存器,这里称为run like so:

自动加载功能通过PSR-0标准加载工作,并从绝对路径工作。这是所有测试工作等注意,胶水是没有名称空间

autoload函数包含一个名为glue的名称空间。在这个名称空间中,我有一个名为\glue\ErrorHandler的错误处理程序

当我触发一个错误时,glue类将根据PSR-0符号从根目录自动加载\glue\ErrorHandler,该根目录由存储的根常量定义。这已经在\glue\User和\glue\Session等类中测试过了

现在来看看问题。我导致\glue\Validation中的调用时间传递引用已被弃用错误,并且它似乎没有运行我的自动加载功能

我可以看到它是如何进入我的autoload函数的,但是当我在那个类中调用这个错误时,它似乎跳过了我的autoloader,然后退出,说它找不到我的错误处理程序类

通常我会说这是我的编程问题,但我已经尝试了所有的方法。我无法解释为什么,因为这一个错误。使我更加困惑的是,如果我导致:

syntax error, unexpected T_ISSET in /media/server_ws/xxxxxxx/glue/Validation.php on line 47
错误:它能工作。这似乎是一个错误,它只是不会自动加载我的错误处理程序

我认为这可能是因为我的spl_autoload_寄存器没有绑定到该名称空间,因为运行的错误处理程序实际上是从glue中调用的,可能是随机工作的。因此,从\glue\Validation中,我调用了一个我从未见过的类:\glue\util\Crypt,但它可以正常工作并正确地进入自动加载程序

当我调用此错误时:调用时间传递引用已从glue类中弃用,它工作得非常好

有人能解释一下吗

编辑 根据要求,这里是Validation.php的brievated版本:

已弃用调用时间传递引用。在脚本编译期间引发错误,并且在编译期间禁用自动加载。它被禁用,因为编译器不能同时开始编译多个脚本,即它不是可重入的,并且自动加载可能会加载某些脚本,这可能需要编译它


来源:

你给我们你的Validation.php文件怎么样?@user1737909这是一个大文件,但我可以提供一个简单的structure@user1737909增加了一个缩减的例子我需要线周围的线47@user1737909这只是我犯的一个随机错误,有效,无效的错误显示在上面,它触发错误处理程序的传递引用,它抱怨找不到我的文件:在第75行的/media/server_ws/xxxx/glue/Validation.php中找不到类'glue\ErrorHandler'。出于某种原因,当它从该类抛出错误时,它不会运行我的自动加载程序。在解析带有调用时间传递引用的文件时,自动加载程序是注册的吗?不,它是在很久以前注册的,该程序首先运行大约一半的程序。我也得到了一半的产出。因此,glue::run被调用,然后过一段时间,$d=new\glue\Validation$d->validateRule;更新答案,解释为什么在这种情况下不使用自动加载器如果我在glue类中导致此错误,它为什么会工作,但在\glue\Validator类中不工作?
syntax error, unexpected T_ISSET in /media/server_ws/xxxxxxx/glue/Validation.php on line 47
namespace glue;

use glue,
    \glue\Exception,
    \glue\Collection;

class Validation extends \glue\Component{
    private function validateRule($rule){
        // This is the line, notice the pass by reference down there?
        $valid = $validator($field,$field_value,$params,&$this->model) && $valid;
    }
}