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


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

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

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

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

Author: Toby Speight, 2010-03-29

5 answers

Всегда имейте в виду, что очень мощной особенностью PHP является его Переменные переменные

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

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

Или более кратко, используя скручивающиеся скобки

$myobject->{'field_'.$key};
 8
Author: Nicolò Martini, 2010-03-29 10:11:44
$myobject->{'field_'.$key}
 8
Author: Ignacio Vazquez-Abrams, 2010-03-29 09:57:28
$val = $myobject->$myattr;
 1
Author: , 2010-03-29 09:58:42

С отражением:

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

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

 1
Author: Davide Gualano, 2010-03-29 10:29:47

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

$myObj->__get($myAttr)
 1
Author: Burgi, 2011-11-21 14:44:10