Допустим, у нас есть объект $ obj. Этот объект имеет свойство, которое выглядит следующим образом:
$obj->p1->p2->p3 = 'foo';
Теперь я получаю вложенную структуру свойств в массиве:
$arr = array( 'p1', 'p2', 'p3' );
В настоящее время я использую следующую функцию для доступа к свойству соответственно:
function getProperty( $obj, $property ) {
foreach( $property as $p ) {
$obj = $obj->{$p};
}
return $obj;
}
$value = getProperty( $obj, $arr); // = 'foo'
Есть ли более разумный способ сделать это (нет, ‘eval’ — это не вариант!;))?
Если вы хотите сделать это в одну строку или немного красивее, вы можете попробовать это:
echo json_decode(json_encode($obj), true)['p1']['p2']['p3']; // PHP 5.4
или для PHP 5.3:
$arr = json_decode(json_encode($obj), true);
echo $arr['p1']['p2']['p3'];
Это цель, которую вы хотите достичь?
Других решений пока нет …