在PHP中,我喜欢一步声明对象(stdClass的新实例)的能力,比如:
$obj = (object) ['a','b','c'];
这很管用但作为类属性:
class Foo {
public $obj = (object) ['a','b','c'];
}
我得到以下错误:
语法错误,意外的"(object)"(object)(T_object_CAST)
有其他方法可以做到这一点吗?而且,有人知道为什么上面的代码被禁止(可能是php5.6特有的)吗?我在任何地方都找不到具体的文档。
从PHP文档中引用:
它们[对象属性]是通过使用一个关键字public、protected或private来定义的,后跟一个普通变量声明。此声明可能包括一个初始化,但此初始化必须是一个常数值——也就是说,它必须能够在编译时进行求值,并且不能依赖于运行时信息才能进行求值。
(我的重点)
和
public $obj = (object) ['a','b','c'];
取决于run-time
信息,即数组到对象的运行时强制转换
绕过这个问题的方法是在构造函数中分配值