首页 > 后端开发 > php教程 > 为什么使用 PHP 的双冒号语法调用非静态方法会失败?

为什么使用 PHP 的双冒号语法调用非静态方法会失败?

Linda Hamilton
发布: 2024-11-21 09:53:10
原创
464 人浏览过

Why Do Calls to Non-Static Methods Using PHP's Double Colon Syntax Fail?

使用双冒号语法调用非静态方法

在 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中文网其他相关文章!

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