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