gpt4 book ai didi

php - 在 PHP 类中使用双冒号调用方法后将方法更改为静态

转载 作者:行者123 更新时间:2023-12-02 14:47:49 25 4
gpt4 key购买 nike

我有一段代码:

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 类内部声明“say”不能通过“$this->”访问?

最佳答案

错误消息实际上非常清楚:您不能使用 $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时这才有效)。这就是为什么如果启用了 E_STRICT,PHP 会发出警告

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com