Для службы SOAP мне нужно создать объект, который может иметь произвольное количество вложенных объектов одного и того же типа. Единственное рабочее решение, которое я придумал, - это использование eval. Я несколько упростил код, в действительности объекты в $ nestedObjArray значительно больше.
$nestedObjArray = array();
$nestedObjArray[] = new stdClass();
$nestedObjArray[] = new stdClass();
$nestedObjArray[] = new stdClass();
$finalObj = new stdClass();
for ($i = 0; $i < count($nestedObjArray); $i++) {
$nestedStr = str_repeat("->nested", $i);
eval('$finalObj->nested'.$nestedStr.' = $nestedObjArray[$i];');
}
, который генерирует следующие 3 утверждения:
$finalObj->nested = $nestedObjArray[0];
$finalObj->nested->nested = $nestedObjArray[1];
$finalObj->nested->nested->nested = $nestedObjArray[2];
Это отлично работает, но довольно уродливо. Кто-нибудь может придумать более элегантное решение? Кстати, следующее вместо строки eval не работает:
$finalObj->nested{$nestedStr} = $nestedObjArray[$i];