私は単純なORMソリューションを開発しており、扱いにくい状況に陥っています。理想的には、静的コンテキストとそれが呼び出される方法に応じてオブジェクトコンテキストの両方でメソッドを使用できるようにしたいと考えています。私はこれが可能であるかどうかわからないけど、ここで私が何を意味するかです:静的/非静的メソッドの問題
は、Userモデルがどこ(呼び出したいと言う)静的に、これは現在、例えば、正常に動作します:
$user = User::where('id = ?', 3);
今、私はユーザーがメッセージを持つなど、関係をサポートします。この関係が確立されると、私は単純にメッセージモデルの空のコピーをユーザーモデルに保存し、外部キーを設定します。たとえば、次のように今
$user -> messages = new Message();
$user -> messages -> foreign_key = 'user_id';
、理想的には、私が呼び出すことができるようにしたい:非静的コンテキストで
$user -> messages -> where('unread = ?', 1);
をし、$これを利用して - > FOREIGN_KEYたときに、この文脈でそう外部キーがユーザーのIDと一致するメッセージをプルするだけです。 PHPではこのようなコンテキスト切り替えが可能ですか?静的コンテキストからの$ thisへの参照は静的メソッドとしてエラーを投げ、$ thisに依存してはいけません(静的コンテキストから呼び出されると、$ thisは存在しません)
この周りの巧妙な方法?私は静的キーワードの有無にかかわらず、2つの異なるプロトタイプを持つメソッドをオーバーロードしようとしましたが、これは再宣言エラーを投げました。
$ user = User :: find();外部キーが指定されていない場合、これを返すようにしたいのですか? – craig1231
'find()'は 'User'クラスの(静的な)関数ですが、' find() 'は' Message'クラスのメソッドです。どちらですか?どちらも? – jedwards
これは不明確な例だったかもしれませんが、質問には関係がないように見えるので、パラメータを省略しましたが、実際にどのように機能するかをより正確に表現してクリアします。 –