使用Autoload时加载特定版本的类

时间:2013-06-02 09:20:30

标签: php oop autoload

考虑一个大型应用程序,它自动加载类:

function __autoload($class)
{
    require_once("/var/www/application/classes/{$class}.php");
}

可能有数十个文件使用该类,所有这些文件都依赖于类中的特定错误。现在我已经修复了bug,我需要更新调用类的所有地方。

从课堂内部开始,我想将已修复类的已知固定位置列入白名单。对于未列入白名单的地方,我会复制旧的行为,在白名单的地方,我会给出正确的行为。 有干净的方法吗?

我正在考虑在修复期间添加一个新的构造函数参数$useFixedVersion(可能需要几天时间),然后返回并删除该参数。但是,这意味着我需要遍历每个地方两次,这似乎是一个相当糟糕的解决方法。 有没有更好的方法来检测调用类的位置?请考虑实例和静态方法都受到影响。

让我们暂时忽略耦合和错误的代码设计,这意味着我需要纠正调用代码,并将这个不幸的事实视为给定。让我们也忽略一个不幸的事实,即我不能简单地在Git中分支,进行修复,然后推向生产!

1 个答案:

答案 0 :(得分:1)

有一个debug_backtrace()函数,可以让你知道调用的地方:

http://php.net/manual/en/function.debug-backtrace.php

那就是说,您是否考虑过使用命名空间?类似的东西:

namespace Foo\Bar;
class FixedBaz extends Baz {}

然后根据需要对类进行别名:

namespace Foo\Bar;
use FixedBaz as Baz;