我知道PHP动态变量是如何工作的,我知道我可以访问对象属性,如 $object->{'somethingWith$var'};
或喜欢$object->$var;
但我试图完成的是访问$object->property->subproperty
从$object
和字符串$string = 'property->subproperty';
.
我试了$object->$string
,$object->{$string}
,$object->$$string
哈哈哈,没有一个奏效。
有人知道如何做到这一点吗? :)
你可以写一个简单的函数,像这样:
function accessSubproperty($object, $accessString) {
$parts = explode('->', $accessString);
$tmp = $object;
while(count($parts)) {
$tmp = $tmp->{array_shift($parts)};
}
return $tmp;
}
没有办法这样做。
您必须首先分配$property = $object->$propertyName
然后访问要$property->$subpropertyName
的 var 。
在您的示例中,字符串property->subproperty
将被视为显然不存在的变量名。
它
不起作用,因为您通过尝试完成的所有工作都是获得与$object->{'property'}->{'subproperty'}
不同的$object{'property->subproperty'}
。
您可以做的是:
$ret = $object;
foreach (explode("->",$string) as $bit)
$ret = $ret->$bit;
或者你将不得不去丑陋和邪恶的eval()
(让反对票开始(:
eval("return '$object->$string;")