php对象:通过计算名称获取属性值

时间:2010-03-29 09:56:15

标签: php object get attributes

如果我在运行时计算名称,如何按名称访问对象的属性?

例如。我遍历键并想要获取属性"field_" . $key的每个值。

在python中有getattribute(myobject, attrname)

当然,它适用于eval("$val=$myobject->".$myattr.";"); 但IMO这很丑陋 - 有更清洁的方法吗?

5 个答案:

答案 0 :(得分:8)

$myobject->{'field_'.$key}

答案 1 :(得分:8)

请记住,PHP的一个非常强大的功能是Variable Variables

您可以使用

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

或更简洁,使用卷曲括号

$myobject->{'field_'.$key};

答案 2 :(得分:1)

$val = $myobject->$myattr;

答案 3 :(得分:1)

使用reflection

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

仅当被评估的财产是公共的,如果它受到保护或私人发生例外时,这种方法才有效。

答案 4 :(得分:1)

我知道这是一个古老的主题,但为什么不只是使用魔法?

$myObj->__get($myAttr)