二重コロン構文を使用した非静的メソッドの呼び出し
PHP では、静的メソッドの構文を使用して非静的メソッドを呼び出すことができます、クラス::メソッド。しかし、そのような呼び出しはなぜ失敗するのでしょうか?
次の例を考えてみましょう:
class Teste { public function fun1() { echo 'fun1'; } public static function fun2() { echo "static fun2"; } }
Teste::fun2() の呼び出しは静的メソッドであるため機能しますが、Teste::fun1 の呼び出しは機能します。 () はエラーを発生させます。
その説明は、PHP の静的メソッドと非静的メソッドの処理が緩いことにあります。非静的メソッドがクラス C の非静的メソッド内から静的に呼び出される場合、非静的メソッド ns 内の $this は C のインスタンスを参照します。
例:
class A { public function test() { echo $this->name; } } class C { public function q() { $this->name = 'hello'; A::test(); } } $c = new C; $c->q(); // prints hello
これにより予期しない動作が発生する可能性がありますが、厳密なエラー報告が有効になっていない限り、エラーではありません。したがって、二重コロン構文を使用して非静的メソッドを静的に呼び出すことは、エラーや混乱を招く動作につながる可能性があるため、推奨されません。
以上がPHP の二重コロン構文を使用した非静的メソッドの呼び出しが失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。