ミニフレームワークがロードされると、多くのオブジェクトを初期化するオートローダーがあります。オブジェクトは静的変数として保存されますが、問題が発生しました。オートローダーでインスタンス化されたファイルがありますが、呼び出されたときに特別なケースを処理して、後で例外ハンドラーのように使用されます。このクラス内のメソッドがクラス オブジェクトである $this を返すことを意図していますが、その場合、返される値は呼び出されたオブジェクトのインスタンスではなく、それを呼び出したクラスに継承されます。さらに、呼び出された exception_handler はそれ自体のインスタンスであるだけでなく、オートローダー全体でインスタンス化されたすべてのものであり、すべてがロードされるときに $this を継承します。紛らわしいですが、小さな例を作成しました:
class a {
public $a_tmp = 'tmp';
}
class b extends a {
public $b_tmp = 'tmp';
public function getOnlyThisClass() {
return $this;
}
}
$b = new b();
$b->getOnlyThisClass();
これは以下を返します:
object(b)#1 (2) {
["b_tmp"]=>
string(3) "tmp"
["a_tmp"]=>
string(3) "tmp"
}
そして、特別なメソッドが呼び出されたときに、呼び出されたクラスのみを返す必要があります。これは工場出荷時のパターンで修正できることはわかっていますが、この場合は避けたいと思います。
ありがとう。