MEMO2018-09-11LaravelのModelクラス等にコード補完が働かない理由PHPStormを使い初めたのですが、Laravelにおいてコード補完が働かない場合がちょくちょくあります。~といった警告がPHPStormで出ます。出るのですが、このコードは正常に動作しますし、公式ドキュメントでもこの書き方が例として書かれています。Worldクラスの親クラスであるModelクラスの中身を見ても、whereメソッドなど存在していません。(存在していれば当然の如く補完が働きます。)ではなぜ前述のコードが動作してるのかというと、Modelクラスにおいて__callおよび__callStaticメソッドを定義しているからです。__callはそのクラスにおいて定義されていないメソッドが呼ばれた際に、__callStaticは定義されていない静的メソッドが呼ばれた際に呼ばれるメソッドになります。Modelクラスがそれをどのように使ってるかというと、簡単なコードにすると以下のような仕組みになります。whereメソッドが存在していないので__callStaticが呼ばれます。staticは呼び出し元のクラスのインスタンスを生成する処理です。(今回の場合はWorldクラスのインスタンスを生成しています。staticによりWorldクラスのインスタンスが生成されたので、次はstaticでないwhereメソッドを探しますが、これもないので__callメソッドに入ります。__callメソッドではBuilderインスタンスを生成して返すnewQueryメソッドが呼ばれ、それ経由でBuilderクラスのwhereメソッドが呼ばれます。blog今回の話にFacadeは出てこないのですが、__callStaticを使って実現する辺りが似ています。}}上記のようにコメントが書かれているのが理由かこちらはコード補完が働きました。Helperこちらのide-helperを使います。公式を毎回見直すべきだが、一応。ide-helper:generate。