首页 > 后端开发 > php教程 > 为什么无法使用双冒号 (::) 运算符调用非静态 PHP 方法?

为什么无法使用双冒号 (::) 运算符调用非静态 PHP 方法?

Linda Hamilton
发布: 2024-11-28 17:14:12
原创
323 人浏览过

Why Can't I Call Non-Static PHP Methods Using the Double Colon (::) Operator?

了解使用双冒号 (::) 的非静态方法调用

尝试使用以下语法调用非静态方法时静态方法(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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板