【问题标题】:Php: can't assign a property value in declarationPHP:不能在声明中分配属性值
【发布时间】:2014-10-22 17:38:23
【问题描述】:

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

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

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

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

【问题讨论】:

标签: php


【解决方案1】:

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

因此,您不能声明具有需要评估的默认值的类属性,因为处理类声明的PHP部分,解析器/编译器,确实不评估

【讨论】:

  • 感谢您的解释。这很简单。
  • 请注意,一些简单的表达式将在即将发布的 PHP 版本中得到支持。
【解决方案2】:

引用 PHP docs(我的重点)

这个声明可能包含一个初始化,但是这个初始化必须是一个常量值——也就是说,它必须能够在编译时被评估,并且不能依赖于运行时信息顺序进行评估。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    相关资源
    最近更新 更多