我知道PHP动态变量如何工作,我知道我可以像访问对象属性一样
$object->{'somethingWith$var'};
或类似$object->$var;
但我尝试完成的是从$object->property->subproperty
和字符串$object
访问$string = 'property->subproperty';
。
我试过$object->$string
,$object->{$string}
,$object->$$string
哈哈哈,没有人工作过。
有人知道怎么做吗? :)
答案 0 :(得分:4)
您可以编写简单的函数,如下所示:
function accessSubproperty($object, $accessString) {
$parts = explode('->', $accessString);
$tmp = $object;
while(count($parts)) {
$tmp = $tmp->{array_shift($parts)};
}
return $tmp;
}
答案 1 :(得分:2)
没有办法像这样做。
您必须先分配$property = $object->$propertyName
,然后访问您想要的变种$property->$subpropertyName
。
在您的示例中,字符串property->subproperty
将被视为变量名称,显然不存在。
答案 2 :(得分:1)
它无法正常工作,因为您尝试完成的只是$object{'property->subproperty'}
$object->{'property'}->{'subproperty'}
当然与$ret = $object;
foreach (explode("->",$string) as $bit)
$ret = $ret->$bit;
不一样。
你能做的是:
eval("return \$object->$string;")
或者你将不得不去丑陋和邪恶的eval()
(让低调的开始):
{{1}}