试试这个:
$test = array (2+2);
var_dump($test);
然后在类中尝试相同的操作:
class test {
public $test = array(2+2);
}
我只想知道为什么会出现解析器错误,以及如何(在类中)尽可能以代码友好和高性能的方式解决这个问题。
不能使用语句初始化类字段。它必须是文字,常量值。解决方法是使用构造函数:
class Test {
public $test;
public function __construct() {
$this->test = array(2+2);
}
}
从手册:
类成员变量称为"属性"。您可能还会看到它们 指使用其他术语,例如"属性"或"字段",但 出于此参考的目的,我们将使用"属性"。他们是 通过使用关键字之一定义
public
、protected
或private
, 后跟一个正态变量声明。本声明可以 包括初始化,但此初始化必须是常量 值 - 也就是说,它必须能够在编译时被计算,并且 不得依赖于运行时信息才能进行评估。
原因是对类中属性的赋值必须是静态声明。 它们不能是计算的表达式。
那就是你可以做的:
public $test = array(4); // static assignment
public $test = 'some string'; // static assignment
public $test = strtoupper(' some string '); // invalid, expression
public $test = $global_variable; // invalid, not a constant expression
public $test = time(); // invalid, an expression