Я знаю, как работают динамические переменные 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
,
В твоих примерах строка property->subproperty
будет рассматриваться как имя переменной, которая явно не существует.
Это не работает, потому что все, что вы делаете с вашими попытками, становится $object{'property->subproperty'}
который, конечно, не то же самое, что $object->{'property'}->{'subproperty'}
,
Что вы можете сделать, это:
$ret = $object;
foreach (explode("->",$string) as $bit)
$ret = $ret->$bit;
Или тебе придётся идти в безобразный и злой eval()
(пусть начнется понижающее голосование):
eval("return \$object->$string;")