防止PHP require_once永远运行

时间:2010-07-06 17:38:54

标签: php require-once

调试其他人的PHP代码,我想有选择地覆盖其中一个类。该课程包括在:

require_once('classname.php');

但是,它出现在应用程序的各个地方。我宁愿'模拟'require_once,所以它永远不会被运行。即按我的要求定义class classname。然后,下次文件被require_once编辑时,它将被标记为已加载,因此不会重新加载。

我可以创建一个自己的classname.php文件,但我宁愿将我正在进行的测试保存到一个文件中,因为我可能会为很多类做这个,而且我想要更容易控制重写。

在Perl中,我想要做的是:

$INC{'classname.pm'} = 1;

有没有办法访问PHP相当于Perl的%INC

更新:对于PHP不允许您执行的操作一直感到惊讶......

我的解决方法是使用runkitrunkit_method_redefine。我加载了我试图阻止加载的类,然后重新定义了我试图“模拟”的所有方法,例如:

require_once('classname.php');
runkit_method_redefine('classname','method','$params','return "testdata";');

3 个答案:

答案 0 :(得分:2)

地点:

<?php return; ?>

位于classname.php文件的最顶部。

答案 1 :(得分:0)

  

然后,下次文件为require_once时,它将被标记为已加载,因此不会重新加载。

require_once为你做这件事..

另外你可以使用hacky之类的东西

if(!class_exists("my_class")) {
  class my_class {}  // define your class here
}

答案 2 :(得分:0)

我在想你的意思是,完全有可能在代码中的其他地方有另一个“required_once”会导致你的被覆盖。

您可以做两件事:

1)追捕第一个“必需”,然后将其评论出来。

2)进入类文件并包含你的类,并在定义另一个类之前返回。