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