为什么不能在类内的数组值中使用运算符


Why can't you use operators in array values inside a class?

试试这个:

$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);
    }
}

手册:

类成员变量称为"属性"。您可能还会看到它们 指使用其他术语,例如"属性"或"字段",但 出于此参考的目的,我们将使用"属性"。他们是 通过使用关键字之一定义 publicprotectedprivate , 后跟一个正态变量声明。本声明可以 包括初始化,但此初始化必须是常量 值 - 也就是说,它必须能够在编译时被计算,并且 不得依赖于运行时信息才能进行评估。

原因是对类中属性的赋值必须是静态声明。 它们不能是计算的表达式。

那就是你可以做的:

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