二重コロン構文による非静的メソッドの呼び出し
PHP では、二重コロン構文を使用して静的メソッドを呼び出すのが一般的です。 ClassName::methodName() など。ただし、この構文で非静的メソッドを呼び出そうとすると、混乱が生じる可能性があります。
非静的メソッドで二重コロン構文が機能しない理由
静的メソッドとは異なり、非静的メソッドが動作するにはクラスのインスタンスが必要です。非静的メソッドが ClassName::methodName() で呼び出される場合、PHP はそれを静的メソッドとして解釈します。これは、特定のインスタンス変数や $this キーワードへのアクセスを必要とするメソッドにとっては意味がありません。
PHP の緩やかな型付け
PHP は静的メソッドと非静的メソッドを異なる方法で処理しますが、次のことが重要です。 PHP はこの点に関しては比較的緩いことに注意してください。二重コロン構文を使用した非静的メソッドの呼び出しは技術的に正しくありませんが、PHP では特定の状況でそれを許可する場合があります。
ただし、この動作は、特に厳密なエラー レポートを使用している場合、予期しない結果やエラーにつながる可能性があります。 。このような場合、PHP はオブジェクトに対して非静的メソッドを呼び出す必要があることを示すエラーをスローします。
非静的メソッドからの $this の参照
興味深いことに, PHP では、同じクラスの別の非静的メソッド内から非静的メソッドを静的に呼び出すことができます。この場合、呼び出されたメソッドの $this キーワードは呼び出しクラスのインスタンスを参照します。
たとえば、次のコードを考えてみましょう。
この例では、クラス A の test() メソッドは、クラス C の q() メソッドから静的に呼び出されます。 test() の $this キーワードは C のインスタンス ($c) を参照し、コードが name プロパティにアクセスして出力できるようにします。 「こんにちは。」
以上がダブルコロン構文を使用して非静的 PHP メソッドを呼び出せないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。