php объект: получить значение атрибута по вычисленному имени - PullRequest
4 голосов
/ 29 марта 2010

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

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

В питоне есть getattribute(myobject, attrname).

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

Ответы [ 5 ]

8 голосов
/ 29 марта 2010

Всегда помните, что очень мощная особенность PHP - Переменные

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

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

или более кратко, используя скручиваемые скобки

$myobject->{'field_'.$key};
8 голосов
/ 29 марта 2010
$myobject->{'field_'.$key}
1 голос
/ 21 ноября 2011

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

$myObj->__get($myAttr)
1 голос
/ 29 марта 2010

С Отражение :

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

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

1 голос
/ 29 марта 2010
$val = $myobject->$myattr;
...