2

试试这个:

$test = array (2+2);
var_dump($test);

然后在一个类中尝试相同的方法:

class test {
    public $test = array(2+2);
}

我只想知道为什么会出现解析器错误,以及如何(在一个类中)尽可能地解决这个问题,使其代码友好和高性能。

4

2 回答 2

5

您不能使用语句来初始化类字段。它必须是一个字面量,一个常量值。一种解决方法是使用构造函数:

class Test {
    public $test;

    public function __construct() {
        $this->test = array(2+2);
    }
}

手册:

类成员变量称为“属性”。您可能还会看到使用“属性”或“字段”等其他术语来提及它们,但出于本参考的目的,我们将使用“属性”。它们是通过使用关键字publicprotected或之一来定义的private,后跟一个普通的变量声明。这个声明可能包括一个初始化,但是这个初始化必须是一个常量值——也就是说,它必须能够在编译时被评估,并且不能依赖于运行时信息才能被评估。

于 2012-05-11T21:58:09.037 回答
1

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

那就是你可以这样做:

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
于 2012-05-11T21:59:09.787 回答