質問: 動的なメソッドをインスタンス化しなくても実行できてしまう ---------------------------- LaravelにてModelクラスを継承したItemClassでidで検索するメソッドを記述しました。 whereを使用した以下のソースコードになります。 ``` class Item extends Model { /** * アイテムID検索 * @param $id * @return Item|mixed */ public function itemSearchById($id) { return Item::where('id',$id); } } ``` whereはstaticメソッドではないため PHPstormに下記のような警告が出ています。 `Non-static method 'where' should not be called statically, but class has __magic more...` しかしこの関数を実際に実行すると問題なく動きます。 動ける理由を教えていただ期待です。 やったこと ----- * 自分で同じクラス内でstaticではないメソッドを実行するとstaticじゃないメソッドが呼ばれたためエラーになることを確認した。
回答: > > 動ける理由を教えていただ期待です。 > > > 基底クラスの`Illuminate\Database\Eloquent\Model`には`__callStatic`メソッドがあって、それが`::where`のように`static`メソッドとして呼ばれたものをさばいています。 PHPマニュアルの`__callStatic`