我不明白全局上下文和类上下文之间变量赋值的不同处理背后的基本原理:
$var1 = "a" . "b"; # PHP syntax o.k.
class myClass {
private $var2 = "a" . "b"; # PHP Parse error: syntax error, unexpected '.', expecting ',' or ';'
}
PS:财产的可见性(私有/受保护/公共)不起作用。
我不明白全局上下文和类上下文之间变量赋值的不同处理背后的基本原理:
$var1 = "a" . "b"; # PHP syntax o.k.
class myClass {
private $var2 = "a" . "b"; # PHP Parse error: syntax error, unexpected '.', expecting ',' or ';'
}
PS:财产的可见性(私有/受保护/公共)不起作用。
这不是“类上下文中的变量赋值”。private $var
为类声明一个属性,并且你还给它一个默认值。您在这里声明了类的结构,这与过程代码中的变量赋值不同。类结构由解析器解析并由编译器编译,并且在此解析/编译步骤中建立属性的默认值。编译器不执行任何程序代码;它只能处理常量值。
因此,您不能使用需要评估的默认值声明类属性,因为处理类声明的 PHP 部分,解析器/编译器,不评估。
引用 PHP文档(我的重点)
这个声明可能包括一个初始化,但这个初始化必须是一个常量值——也就是说,它必须能够在编译时被评估,并且不能依赖运行时信息才能被评估。
相反,如果它们依赖于任何评估,则在构造函数中定义值。