使用双冒号语法调用非静态方法
在 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中文网其他相关文章!