我有一段代码:
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/