2010-03-29 3 views
3

Как получить доступ к атрибуту объекта по имени, если я вычислил имя во время выполнения?php object: получить значение атрибута по вычисленному имени

Например. Я перебираю ключи и хочу получить каждое значение атрибутов "field_" . $key.

В python есть getattribute(myobject, attrname).

Он работает, конечно, с eval("$val=$myobject->".$myattr.";"); , но ИМО это уродливо - есть ли более чистый способ сделать это?

ответ

7

Имейте всегда в виду, что очень мощная функция PHP является его Variable Variables

Вы можете использовать

$attr = 'field' . $key; 
$myobject->$attr; 

или более сжато, используя свертыванию кронштейны

$myobject->{'field_'.$key}; 
8
$myobject->{'field_'.$key} 
+2

+1 - вы можете использовать фигурные скобки '{}' всякий раз, когда вы хотите PHP, чтобы оценить их содержимое перед остальной частью выражения – Andy

+0

Здравствуйте, Могу ли я использовать что-то вроде этого '$ MyObject -> { 'level1- > level2 '} '.. Или' $ myObject -> {level1} -> {level2} '. Как это сделать для нескольких уровней, когда значения уровня являются динамическими? –

1

С reflection:

$reflectedObject = new ReflectionObject($myobject); 
$reflectedProperty = $reflectedObject->getProperty($attrName); 
$value = $reflectedProperty->getValue($myobject); 

Это работает только если доступ к собственности является открытым, если он защищен или частное исключение будет occurr.

1

Я знаю, что это старый вопрос, но почему бы просто не использовать магические методы?

$myObj->__get($myAttr) 
Смежные вопросы