不能在声明中给属性赋值


Php: can't assign a property value in declaration

我不明白全局上下文和类上下文对变量赋值的不同处理背后的原因:

$var1 = "a" . "b"; # PHP syntax o.k.
class myClass {
    private $var2 = "a" . "b"; # PHP Parse error:  syntax error, unexpected '.', expecting ',' or ';'
}

注::属性(private/protected/public)的可见性不起作用

这不是"类上下文中的变量赋值"。private $var为类声明了一个属性,您还为它提供了一个默认值。您在这里声明类的结构,这与过程代码中的变量赋值不同。类结构由解析器解析并由编译器编译,属性的默认值在解析/编译步骤中建立。编译器不执行任何过程代码;它只能处理常量

因此,你不能声明类属性的默认值需要求值,因为PHP中处理类声明的部分,解析器/编译器,不会求值

引用自PHP文档(我的重点)

这个声明可以包含一个初始化,但是这个初始化必须是一个常数值——也就是说,它必须能够在编译时求值,并且不能依赖于运行时信息来求值。

相反,如果值依赖于任何求值,则在构造函数中定义值。