我有一段代码:
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-&gt;'访问?
答案 0 :(得分:4)
错误消息实际上非常清楚:您不能使用$ 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时警告您的原因
答案 1 :(得分:2)
使用self::say()
或example::say()
。如果您在对象上下文中(即,您有一个使用$this
实例化的示例对象),则应使用new
。
答案 2 :(得分:0)
您需要使用Scope Resolution Operator(::)来访问类中的静态方法。因此,将第5行更改为阅读......
example::say($x - 1);
(你也可以使用self:say
来达到同样的效果。)