【发布时间】:2016-05-06 10:00:18
【问题描述】:
在 PHP 5.6 中:
当在一个类中时,我们通常像这样声明和调用一个公共类变量:
class MyClass
{
/**
* @var int
*/
public $myVar = 0;
// call it in a public function:
public function myFunction()
{
return $this->myVar;
}
}
我这样调用函数:
MyClass::myFunction();
在 PHP 7.0 中,该代码会引发致命错误:
不在对象上下文中使用 $this
再次将我的 PHP 版本改回 5.6 后,错误消失了。
问题:
我不得不承认,在阅读手册并从 5.6 更改为 7.0 之后,我不明白。
- 我们如何在 PHP 7.0 中声明和调用公共类变量?
- 我们如何编写此代码以兼容 5.6 和 7.0?
在 cmets 之后编辑:
那么为什么对非静态方法的静态调用在 5.6 中有效?
【问题讨论】:
-
你是怎么调用函数的?这很重要。
-
我很确定您对错误的分析不正确。您显示的代码很好。我同意上述观点,原因是调用所述方法。
-
它不是静态函数,如果是的话。你的变量不是静态的。
-
php.net/manual/en/migration70.deprecated.php - 对非静态方法的静态调用
-
它在 5.6 中无法正常工作,但您可能在 5.6 中抑制了消息... 7 使消息更加严格Demo