私は両方の魔法のメソッドを使用しています_ callとORM/ Activerowのようなものを自分で実装するための _callStatic。それらは主に特定の関数呼び出しをキャッチすることを目的としています: __call
はゲッターとセッター、およびメソッド (例: )__callStatic
を担当します。findBy
findById
外部キーをマップするために、呼び出しを変換して、たとえばgetArticle
の値を返すようにしていますArticle::findById()
。そのために、私は my 内でこのケースを使用しています__call
:
if (strstr($property, "_id")) {
return $foreignClass::findById($this->getId());
}
ここで、 setまたはget in$property
の後の部分文字列と残りの文字列です。したがって、呼び出しの場合、$property は get であり、.__call
$foreignClass
getArticle
$foreignClass
Article
値が正しいことを確認するために、いくつかのエコーを配置しました。ただし、私の__call
メソッドは my の代わりに呼び出されます__callStatic
。暗黙的な静的メソッドを作成するfindById
と、呼び出されます(したがって、静的呼び出しとして認識されます)。私が具体的に呼び出すとArticle::findById()
、__call
それもキャッチします。
これは比較的新しい のエラー__callStatic
ですか、それとも何か間違っていますか?
編集:問題はこの部分にあるようです:
_call() は、オブジェクト コンテキストでアクセスできないメソッドを呼び出すときにトリガーされます。
__callStatic() は、静的コンテキストでアクセスできないメソッドを呼び出すときにトリガーされます。
クラスで呼び出していますが、オブジェクト コンテキストから呼び出しています。この場合、静的コンテキストに入る方法はありますか?