0

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

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

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

在课堂上,我想将已知的固定位置列入白名单,从我修复错误的位置调用该类。对于未列入白名单的地方,我会复制旧的行为,而在列入白名单的地方,我会给出正确的行为。有没有一种干净的方法可以做到这一点?

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

让我们暂时忽略耦合和糟糕的代码设计,这意味着我需要更正调用代码,并将这个不幸的事实视为既定事实。让我们也忽略一个不幸的事实,即我无法在 Git 中简单地分支,进行修复,然后推送到生产环境!

4

1 回答 1

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;
于 2013-06-02T10:50:53.643 回答