试试这个:
$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