如何将多个数组元素转换为对象

5

我正在尝试创建一个包含多个对象的数组。

我写了这段代码(它是现有类的成员)

public static $Roles = [
    (object) ['code' => 'SO', 'name' => 'Socio'],
    (object) ['code' => 'RESP', 'name' => 'Responsabile zona'],
    (object) ['code' => 'AMM', 'name' => 'Amministratore'],
];

但是我遇到了这个错误:

语法错误,意外的“(object)”(对象)(T_OBJECT_CAST),期望“)”

在第二行。

我以为这样应该能行,因为我已经使用同样的转换语法来定义关联数组元素了:

return view('edit-headquarter', [
  'hq' => (object)['name' => '', 'id' => 0],
  'submitAction' => 'insert'
]);

我做错了什么吗?

编辑:我正在使用PHP 5.4.45

我不确定,但是像Martin Persson建议的那样,可能与这个有关


我认为这与您的PHP版本有关。如果不起作用,您可以考虑声明一个Stdclass对象,或者更好的办法是实现一个从提供的数组返回stdclass对象的函数。(另外,另一种可能的技巧是json_decode json_encode(array)) - briosheje
@user340764,它在哪里能够正常工作?https://3v4l.org/pXo2o - Federkun
2
正如文档所述:“与任何其他PHP静态变量一样,只能使用文字或常量来初始化静态属性;不允许使用表达式。” - Federkun
@AndreaParodi:针对你的任务,我认为你能得到的最接近的结果是这样的:https://3v4l.org/nZtOE(主要是因为你不能在静态声明中使用表达式,正如Federico所说) - briosheje
@briosheje:谢谢,我已经重构了代码,声明属性未初始化,然后稍后再填充它... - Andrea Parodi
显示剩余3条评论
2个回答

3

如果您使用的是低于v5.6版本的PHP,则不允许将表达式作为类成员的默认值。除此之外,我认为您声明的方式没有任何问题。


我将表达式提取到一个变量中,并将该变量用作默认值。对象现在可以正常创建。在定义起始属性时,我收到了一个错误。 - Andrea Parodi
好的,正如Federico所建议的那样,我也不能将变量用作初始化器。这很有道理...谢谢大家! - Andrea Parodi

0
将关联数组转换为对象,您可以使用一种有点不太干净但广泛使用的方法:
```$obj = json_decode(json_encode($arr));```

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接