来自字符串的PHP动态变量

时间:2015-02-11 12:53:05

标签: php dynamic var

我知道PHP动态变量如何工作,我知道我可以像访问对象属性一样 $object->{'somethingWith$var'};或类似$object->$var;

但我尝试完成的是从$object->property->subproperty和字符串$object访问$string = 'property->subproperty';

我试过$object->$string$object->{$string}$object->$$string哈哈哈,没有人工作过。

有人知道怎么做吗? :)

3 个答案:

答案 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}}