我似乎仍然对自动加载在 PHP 中的工作方式有一些误解,我根本无法解释。
我有一个名为的类,它的主函数中有一个,这里glue
这样调用:spl_autoload_register
run
class glue{
public static function run(){
spl_autoload_register(array('glue','autoload'));
}
}
自动加载功能通过 PSR-0 标准加载并从绝对路径工作。这一切都被测试为工作等。请注意,glue
它没有命名空间。
autoload 函数覆盖了一个名为glue
. 在这个命名空间中,我有一个名为\glue\ErrorHandler
.
当我触发错误时,glue
该类将通过 PSR-0 表示法从存储常量\glue\ErrorHandler
定义的根目录自动加载。这已经过测试,在和ROOT
等类中也能正常工作。\glue\User
\glue\Session
所以现在解决问题。我导致了一个Call-time pass-by-reference has been deprecated
错误\glue\Validation
,它似乎没有运行我的自动加载功能。
我可以看到它是如何进入我的自动加载函数的,但是当我在那个类中调用这个错误时,它似乎只是跳过了我的自动加载器并退出说它找不到我的错误处理程序类。
通常我会说这与我的编程有关,但我已经尝试了一切。对于这个错误,我无法解释如何。让我更加困惑的是,如果我导致:
syntax error, unexpected T_ISSET in /media/server_ws/xxxxxxx/glue/Validation.php on line 47
错误它的工作原理。似乎是因为一个错误,它不会自动加载我的错误处理程序。
我认为这可能是因为 myspl_autoload_register
没有绑定到该名称空间(因为工作的错误处理程序实际上是从 inside 调用的glue
)以及某些方式,也许它是随机工作的。因此,\glue\Validation
我调用了一个我从未看过的类:\glue\util\Crypt
但这可以正常工作并正确进入自动加载器。
当我调用这个错误时:Call-time pass-by-reference has been deprecated
在glue
课堂上它工作得很好。
任何人都可以对此有所了解吗?
编辑
按照这里的要求是一个简短的版本Validation.php
:
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;
}
}