我有一段代码:

class example {
    public function say($x) {
        if ($x > 0) {
            echo $x;
            $this->say($x - 1);
        }
        else echo "0<br>\n";
    }
}

example::say(5);


称呼我有:

 5
 Fatal error: Using $this when not in object context in (...).php on line 5


为什么会这样呢?函数“说”发生了什么?我看到它在类外部被调用过一次,但是为什么在类内部PHP声称'$ this->'不能被'say'接受呢?

最佳答案

该错误消息实际上非常清楚:您不能使用$ this,因为您从未创建示例类的实例。如果要静态调用方法,请使用以下命令:

class example {
    public static function say($x) {
        if ($x > 0) {
           echo $x;
           self::say($x - 1); // static call
       }
       else {
           echo "0<br>\n";
       }
   }
}

example::say(5);


或者以更面向对象的方式:

class example {
    public function say($x) {
        if ($x > 0) {
           echo $x;
           $this->say($x - 1);
       }
       else {
           echo "0<br>\n";
       }
   }
}

$x = new example();
$x->say(5);


您可以静态地调用非静态方法,但是不可以(这仅在该方法不使用$ this的情况下有效)。这就是为什么PHP在启用E_STRICT时警告您的原因

关于php - 在PHP类中使用双冒号调用后将方法更改为静态,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4641925/

10-13 07:12
查看更多