如果我在运行时计算名称,如何按名称访问对象的属性?
例如。我遍历键并想要获取属性"field_" . $key
的每个值。
在python中有getattribute(myobject, attrname)
。
当然,它适用于eval("$val=$myobject->".$myattr.";");
但IMO这很丑陋 - 有更清洁的方法吗?
答案 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)