他の人のPHPコードをデバッグして、そのクラスの1つを選択的にオーバーライドしたいと思います。クラスは次の方法で含まれます。
require_once('classname.php');
しかし、それはアプリケーションのさまざまな場所に表示されます。を「シミュレート」したいrequire_once
ので、まったく実行されません。class classname
つまり、私が望むように定義するだけです。次に、ファイルがrequire_once
'edされたときに、すでにロードされているため、リロードされていないというフラグが立てられます。
独自のclassname.phpファイルを作成することもできますが、多くのクラスでこれを実行している可能性があるため、実行しているテストを1つのファイルに含めたままにしておきます。オーバーライドします。
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";');