Переменные в объектных операторах

Я пытаюсь настроить оператор на основе переменных на PHP, но я могу только выполнить то, что я ищу в ограниченной степени. Например, следующий код допускает выбор переменной:

$var1 = 'available_from'; $keyValuePairs[$key] = $item->parent()->{$var1}; 

Однако, если я хочу также сделать родительский селектор переменной, я больше не могу этого делать. Оба следующих метода не выполняются:

 $var1 = 'parent()->available_from'; $keyValuePairs[$key] = $item->{$var1}; 

а также

 $var1 = 'parent()'; $var2 = 'available_from'; $keyValuePairs[$key] = $item->{$var1}->{$var2}; 

Поэтому вопрос заключается в том, есть ли способ сделать это.

Вы можете это сделать в основном, но вы должны поставить parens снаружи.

 $var1 = 'parent'; $var2 = 'available_from'; $keyValuePairs[$key] = $item->{$var1}()->{$var2}; // or $keyValuePairs[$key] = $item->$var1()->{$var2}; 

И в принципе нет возможности обойти это без использования eval:

 // escape the first $ $keyValuePairs[$key] = eval( "\$item->$var1->$var2" ); 

Но нет смысла использовать eval, если у вас есть доступ к потенциальному набору переменных.

Вы можете сделать что-то подобное, чтобы обойти это:

 function call_or_return( $obj, $prop ) { // test to see if it is a method (you'll need to remove the parens first) $arr = array( $obj, $prop ); // if so call it. if( is_callable( $arr ) ) return call_user_func( $arr ); // otherwise return it as a property return $obj->$prop; } call_or_return( $item, $var1 )->{$var2};