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

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

Susan Sarandon
Susan Sarandon原创
2024-11-27 01:15:18927浏览

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn