How do I dynamically write a PHP object property name?

Update for PHP 7.0

PHP 7 introduced changes to how indirect variables and properties are handled at the parser level (see the corresponding RFC for more details). This brings actual behavior closer to expected, and means that in this case $obj->$field[0] will produce the expected result.

In cases where the (now improved) default behavior is undesired, curly braces can still be used to override it as shown below.

Original answer

Write the access like this:

$obj->{$field}[0]

This “enclose with braces” trick is useful in PHP whenever there is ambiguity due to variable variables.

Consider the initial code $obj->$field[0] — does this mean “access the property whose name is given in $field[0]“, or “access the element with key 0 of the property whose name is given in $field“? The braces allow you to be explicit.

Leave a Comment