объект php: получить значение атрибута по вычисляемому имени
Как получить доступ к атрибуту объекта по имени, если я вычисляю имя во время выполнения?
Например. Я перебираю ключи и хочу получить каждое значение атрибутов "field_" . $key
.
В python есть getattribute(myobject, attrname)
.
Это, конечно, работает с eval("$val=$myobject->".$myattr.";");
, но ИМО это некрасиво - есть ли более чистый способ сделать это?
4
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
С отражением:
$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