首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要spl_autoload_register覆盖__autoload

我需要spl_autoload_register覆盖__autoload
EN

Stack Overflow用户
提问于 2013-02-21 01:14:30
回答 1查看 777关注 0票数 0

我正在用php中的更新对象替换一些旧的对象。该站点当前有一个简单地调用include目录中的.inc文件的__autoload函数。我已经使用spl_autoload_register为更新后的对象创建了一个新的自动加载函数。它使用名为lib的目录和名称空间。

我有一个名为Sample的对象,旧对象也名为Sample,它引用了include/sample.inc中的定义。那么新的对象路径是lib/Sample.php。我的问题是,即使我在调用对象的页面上使用spl_autoload_register,它仍然在调用旧对象。这是我的代码(请注意,__autoload()是在访问此页面之前定义的)。

代码语言:javascript
复制
<?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());
        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-21 02:09:11

当您开始使用spl_时...方法,它们篡改了任何现有的__autoload函数:

如果您的代码已有__autoload()函数,则必须在__autoload堆栈上显式注册此函数。这是因为spl_autoload_register()将有效地将__autoload()函数的引擎缓存替换为spl_autoload()或spl_autoload_call()。

人们可以在一个简单的例子中看到这一点:

代码语言:javascript
复制
<?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是否可在脚本中调用(它的源代码是否已包含在内?)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14985850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档