我不明白全局上下文和类上下文对变量赋值的不同处理背后的原因:
$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文档(我的重点)
这个声明可以包含一个初始化,但是这个初始化必须是一个常数值——也就是说,它必须能够在编译时求值,并且不能依赖于运行时信息来求值。
相反,如果值依赖于任何求值,则在构造函数中定义值。