3

他の人の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";');
4

3 に答える 3

2

場所:

<?php return; ?>

ファイルの一番上にありclassname.phpます。

于 2010-07-06T18:01:28.340 に答える
0

次に、ファイルがrequire_onceされたときに、すでにロードされているため、リロードされていないというフラグが立てられます。

require_onceがこれを行います。

さらに、あなたは次のようなハッキーなものを使うことができます

if(!class_exists("my_class")) {
  class my_class {}  // define your class here
}
于 2010-07-06T18:12:31.303 に答える
0

私はあなたが意味していることは、あなたのコードが上書きされる原因となる別の「required_once」がコードのどこかにある可能性があるということだと思います。

できることは2つあります。

1)最初の「必須」を探し出し、コメントアウトします。

2)クラスファイルに移動し、クラスを含めて、他のクラスが定義される前に戻ります。

于 2010-07-06T18:28:31.520 に答える