有没有办法“;铸造“;作为类/特征属性的(对象)的数组


Is there a way to "cast" an array to (object) as a property of class/trait?

在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信息,即数组到对象的运行时强制转换

绕过这个问题的方法是在构造函数中分配值