我正在用php中的更新对象替换一些旧的对象。该站点当前有一个简单地调用include目录中的.inc文件的__autoload函数。我已经使用spl_autoload_register为更新后的对象创建了一个新的自动加载函数。它使用名为lib的目录和名称空间。
我有一个名为Sample的对象,旧对象也名为Sample,它引用了include/sample.inc中的定义。那么新的对象路径是lib/Sample.php。我的问题是,即使我在调用对象的页面上使用spl_autoload_register,它仍然在调用旧对象。这是我的代码(请注意,__autoload()是在访问此页面之前定义的)。
<?php
spl_autoload_register('autoload_lib');
$sample_id = req('sample_id');
$alert = req('alert');
if (!empty($sample_id))
{
$sample = new Sample($sample_id);
var_dump($sample); die();
$referral = $sample->Referral();
matry::open (get_defined_vars());
}
else
{
matry::open(get_defined_vars());
}发布于 2013-02-21 02:09:11
当您开始使用spl_时...方法,它们篡改了任何现有的__autoload函数:
如果您的代码已有__autoload()函数,则必须在__autoload堆栈上显式注册此函数。这是因为spl_autoload_register()将有效地将__autoload()函数的引擎缓存替换为spl_autoload()或spl_autoload_call()。
人们可以在一个简单的例子中看到这一点:
<?php
ini_set('display_errors', 1);
function __autoload($className) {
exit("__autoload");
}
spl_autoload_register(function($className) {
exit("spl_autoload");
});
// try to create nonexistent class
new Foo();
?>上面的示例输出"spl_autoload“
您确定在该阶段脚本中没有注册其他自动加载器吗?您可以通过添加预端参数来测试这一点(例如,spl_autoload_register(' autoload_lib ',true,true);此时autoload_lib是否可在脚本中调用(它的源代码是否已包含在内?)
https://stackoverflow.com/questions/14985850
复制相似问题