oop-PHPプロジェクトにメソッドの実装がありません
最近私は誰かのPHPサイトプロジェクトを手に入れました(そしてこの誰かは私を助けたくないのです)ので、私は彼のコードを理解する必要があります。そして、私の答えはばかげているかもしれませんが...
ただし、クラスの前に、例のように文書化されたメソッドがいくつかあります。
namespace Base\Classes;
/**
* @method int method1()
* @method $this method2(int $parameter)
*/
class SomeClass extends ParentClass
{
public $_s_a = false;
public $_user_roles = [];
public function SomeClassMethod() {
somethingDone();
}
}
そして、この例でわかるように、これらの文書化されたメソッドは、定義されたクラスに実装されていません。しかし、私の質問は何ですか-このメソッドは別のクラスとテンプレートから呼び出されます。そして、PHPStorm(私のIDE)は、このドキュメント行を呼び出しに接続し、 ctrl+B
は参照間からリードします。しかし、私はこのメソッドの正確な実装を見つけることができません。それらは親クラスにはありません。このファイルにはありません。そして、これは私がよく知らない構文糖衣かもしれないと思いました。私は正しいですか?または、私が見逃しているものがあり、すべての実装は別の場所にありますか? (フォルダ内のメソッド名で検索しても何も得られません)
答え :
解決策:
PHPにはいくつかの魔法のメソッドがあり、そのうちの1つは __call()
。
__call()
を(それ自体または親クラスの1つによって)実装するオブジェクトがある場合、そのオブジェクトでアクセスできないメソッドを呼び出し、 { -代わりに-code-1}
メソッドが呼び出されます。これは、たとえば、外部からプライベートメソッドを呼び出す場合、またはコードで定義されていないメソッドを呼び出す場合に発生します。
アクセスできないメソッドに対してこのような呼び出しを使用すると、コード自体は実行時に機能する可能性がありますが、IDEはメソッドが存在しないという警告を表示する可能性があります。これらの警告は非常に煩わしいため、クラスに @method
タグを追加すると、IDEはこのメソッドが存在することを認識し、表示されません。警告。
したがって、誰かから取得したコードをサポートするには、 __call()
メソッドの実装を確認してください。このメソッドは親クラスの1つに実装されている可能性があることに注意してください。そのため、それらもチェックしてください。
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。