首页 > 后端开发 > php教程 > 为什么无法在 PHP 中使用双冒号语法调用非静态方法?

为什么无法在 PHP 中使用双冒号语法调用非静态方法?

Susan Sarandon
发布: 2024-11-27 01:15:18
原创
985 人浏览过

Why Can't I Call Non-Static Methods Using the Double-Colon Syntax in 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中文网其他相关文章!

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