调试别人的 PHP 代码,我想有选择地覆盖他们的一个类。该课程通过以下方式包含:
require_once('classname.php');
但是,它出现在应用程序的各个地方。我宁愿“模拟” require_once
,这样它就永远不会运行。即class classname
按我的意愿定义。然后,下次文件被require_once
'ed 时,它会被标记为已经加载,因此不会重新加载。
我可以创建自己的 classname.php 文件,但我宁愿将我正在做的测试包含在一个文件中,因为我可能为许多类执行此操作,并且我希望更轻松地控制压倒一切。
在 Perl 中,我想做的是:
$INC{'classname.pm'} = 1;
有没有办法访问 PHP 的 Perl 等价物%INC
?
更新:一直对 PHP 不允许你做的事情感到惊讶......
我的解决方法是使用runkit的runkit_method_redefine
. 我加载了我试图阻止加载的类,然后重新定义了我试图“模拟”的所有方法,例如:
require_once('classname.php');
runkit_method_redefine('classname','method','$params','return "testdata";');