如何动态编写PHP对象属性名称?

问题描述

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,以便它可以输出适当的值。关于如何处理此问题的想法?