1

簡単な質問ですが、これが本当に可能かどうかはわかりません。

例:

クラステストには、次のようなspl_autoload_registerがあります。

function __construct() {
spl_autoload_register(function ($class) {
        echo "{$this->projectroot}/include/{$class}.php";
        require_once(strtolower("{$this->projectroot}/classes/{$class}.php"));
});
}

$ projectrootは、プロジェクトのディレクトリへのパスを持つオブジェクトスコープ変数です。

プロジェクトにクラステストを含め、そこから新しいインスタンスを作成します。

$test = new test();

ここで、次を作成するときに、$testが関数を含むクラスファイルをロードするようにします。

$test2 = new test2();

ここで、test2は、test2と呼ばれる/include/test2.php内のクラスです。

これを実行しようとすると、次のようなエラーが発生します。

Fatal error: Using $this when not in object context in

しかし、私が試してみると:

$test2 = new $test1->test2();

test1のspl_autoload_register関数を完全に無視します:/明らかにtest2が既知のメソッド(未定義のプロパティ)ではないことを示すだけです。

メインプロジェクトでさらに定義せずに、プロジェクトのクラステストでspl_autoload_register関数を使用する方法はありますか?

編集

グローバル変数を使用して「修正」しましたが、OOPメソッドがあるかどうか知りたいですか?(これが実用的/ベストプラクティスのOOP使用であるというわけではありません...)ただ好奇心が強いです。

4

2 に答える 2

3

任意の呼び出し可能なオブジェクトをパラメーターとして登録できます。

spl_autoload_register( array( $object, 'public function name'));

spl_autoload_register( 'classname::static_method');

助けるべきです。

于 2012-12-28T19:46:46.750 に答える
0

質問に対する反応からの引用: PHP 5.4 では、そのようなクロージャー内で $this を使用できます。

これがおそらく答えです。

于 2012-12-28T20:16:42.843 に答える