Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用自动加载时加载类的特定版本_Php_Oop_Autoload - Fatal编程技术网

Php 使用自动加载时加载类的特定版本

Php 使用自动加载时加载类的特定版本,php,oop,autoload,Php,Oop,Autoload,考虑一个自动加载类的大型应用程序: function __autoload($class) { require_once("/var/www/application/classes/{$class}.php"); } 可能有数十个文件使用该类,所有这些文件都依赖于该类中的特定bug。现在我已经修复了这个bug,我需要更新调用该类的所有位置 在类内部,我想将已知的固定位置列为白名单,在那里调用该类,从那里我修复了bug。对于未列入白名单的地方,我会复制旧的行为,在列入白名单的地方,我会给

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

function __autoload($class)
{
    require_once("/var/www/application/classes/{$class}.php");
}
可能有数十个文件使用该类,所有这些文件都依赖于该类中的特定bug。现在我已经修复了这个bug,我需要更新调用该类的所有位置

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

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


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

有一个
debug\u backtrace()
函数,它允许您知道从何处调用内容:

也就是说,您是否考虑过为此使用名称空间?比如:

namespace Foo\Bar;
class FixedBaz extends Baz {}
然后根据需要别名这些类:

namespace Foo\Bar;
use FixedBaz as Baz;

谢谢你,丹尼斯。看起来debug_backtrace()会做得很好。我也不认为使用名称空间是一个好的解决方法。