了解使用双冒号 (::) 的非静态方法调用
尝试使用以下语法调用非静态方法时静态方法(class::method),您可能会遇到错误。与配置问题相反,这种行为是 PHP 设计所固有的。
在 PHP 中,非静态方法需要首先创建实例才能调用。发生错误的原因是使用 class::method 语法时,没有显式提供实例。
静态方法和非静态方法的区别
静态方法可以在不调用的情况下调用类的实例,而非静态方法则需要实例。这种区别在下面的示例中很明显:
class Teste { public function fun1() { echo 'fun1'; } public static function fun2() { echo "static fun2" ; } } Teste::fun2(); // This is valid because fun2 is a static method Teste::fun1(); // This will generate an error because fun1 is not a static method
不一致的行为
但是,PHP 与静态调用的非静态方法表现出一些不一致的行为。如果从同一类的非静态方法中静态调用非静态方法,非静态方法中的 $this 将引用该类的当前实例。
class A { public function test() { echo $this->name; } } class C { public function q() { $this->name = 'hello'; A::test(); } } $c = new C; $c->q(); // This will print 'hello'
此行为启用严格错误报告后可以被视为错误。
结论
调用非静态方法通常不鼓励使用静态方法的语法。它可能会导致意外的行为或错误。相反,建议使用正确的语法来调用非静态方法,这涉及创建类的实例,然后在该实例上调用该方法。
以上是为什么无法使用双冒号 (::) 运算符调用非静态 PHP 方法?的详细内容。更多信息请关注PHP中文网其他相关文章!