ホームページ >バックエンド開発 >PHPチュートリアル >PHP で二重コロン構文を使用して非静的メソッドを呼び出せないのはなぜですか?
PHP では、クラス名とそれに続くスコープ解決演算子 (::) を使用して静的メソッドを呼び出すことができます。 。ただし、一般に、同じ方法で非静的メソッドを呼び出すことはできません。
二重コロン構文の非静的メソッド
以下のコード スニペットは、二重コロン構文を使用して、非静的メソッド fun1 を呼び出します。
class Teste { public function fun1() { echo 'fun1'; } public static function fun2() { echo "static fun2" ; } } Teste::fun1(); // why? Teste::fun2(); // ok - is a static method
このコードは、非静的メソッドにはクラス名を介して直接アクセスできないため、エラーが発生します。
制限の理由
PHP では、静的メソッドと非静的メソッドに対して緩やかな型付けを採用しています。静的メソッド。非静的メソッドが静的に呼び出される場合、そのメソッド内の $this キーワードはクラスのインスタンスを参照しません。この緩い動作により、コードに一貫性がなくなり、潜在的にエラーが発生する可能性があります。
静的メソッドのバリアント
二重コロン構文は、静的メソッドを呼び出す場合にのみ許可されます。以下に例を示します。
class StaticExample { public static function staticMethod() { echo "static method"; } } StaticExample::staticMethod(); // valid
非静的メソッド内
同じ非静的メソッド内から非静的メソッドを静的に呼び出すことができます。クラス。このような場合でも、呼び出されたメソッド内の $this は正しいオブジェクト インスタンスを参照します。
class A { public function nonStaticMethod() { echo $this->name; } } class C { public function callNonStatic() { $this->name = 'Example'; A::nonStaticMethod(); // valid } } $c = new C; $c->callNonStatic(); // prints Example
以上がPHP で二重コロン構文を使用して非静的メソッドを呼び出せないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。