问题描述
PHP 7.0更新
PHP
7引入了对在解析器级别处理间接变量和属性的方式的更改(有关更多详细信息,请参见相应的RFC)。这使实际行为更接近预期,并意味着在这种情况下$obj->$field[0]
将产生预期的结果。
在不需要(现在已改进)默认行为的情况下,仍然可以使用花括号将其覆盖,如下所示。
原始答案
像这样写访问:
$obj->{$field}[0]
每当由于变量变量引起歧义时,这种“用大括号括起来”的技巧在PHP中很有用。
考虑一下初始代码$obj->$field[0]
-这是否意味着“访问名称是在属性中的属性$field[0]
”,还是“使用0
名称是在属性中的属性的键访问元素$field
?”
大括号可以使您显得清晰。
解决方法
我的代码中具有对象属性,如下所示:
$obj ->field_name_cars[0];
$obj ->field_name_clothes[0];
问题是我有100多个字段名称,需要动态写入属性名称。否则,对象名称和属性的键将始终相同。所以我尝试了:
$obj -> $field[0];
希望可以动态更改属性名称并访问正确的值。但是,我一直在stdClass :: $ field中得到’undefined property $ field;。
我或多或少尝试在执行之前动态编写php,以便它可以输出适当的值。关于如何处理此问题的想法?