Php:无法在声明中指定属性值

时间:2013-05-09 08:52:01

标签: php

我不理解全局上下文和类上下文之间变量赋值的不同处理背后的基本原理:

$var1 = "a" . "b"; # PHP syntax o.k.

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

P.S。:财产的可见性(私人/受保护/公共)不起作用。

2 个答案:

答案 0 :(得分:5)

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

因此,你不能使用需要评估的默认值声明类属性,因为处理类声明的PHP部分,即解析器/编译器,不评估

答案 1 :(得分:3)

引用PHP docs(我的重点)

  

此声明可能包括初始化,但此初始化必须是常量值 - 也就是说,它必须能够在编译时进行评估,并且不能依赖于运行时信息。为了评估。

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