#php #object #stdclass
#php #объект #стандартный класс
Вопрос:
Я создал с помощью php новый объект с новым стандартным классом.
$response->node1->node2->summary = new stdClass();
$response->node1->node2->summary->text = "lorem ipsum";
echo "<pre>";
var_dump( $response );
echo "</pre>"
Это результат:
object(stdClass)#17 (1) {
["node1"]=>
object(stdClass)#10 (1) {
["node2"]=>
object(stdClass)#12 (1) {
["summary"]=>
object(stdClass)#16 (1) {
["text"]=>
string(11) "lorem ipsum"
}
}
}
}
Как возможно создать больше объектов в цикле с именем «summary»?
Результат должен выглядеть следующим образом:
object(stdClass)#17 (1) {
["node1"]=>
object(stdClass)#10 (1) {
["node2"]=>
object(stdClass)#12 (1) {
["summary"]=>
object(stdClass)#16 (1) {
["text"]=>
string(11) "lorem ipsum"
}
["summary"]=>
object(stdClass)#17 (1) {
["text"]=>
string(11) "different content"
}
}
}
}
в цикле for я всегда получаю содержимое, которое является последним в цикле for.
спасибо, что помогли мне.
Комментарии:
1. Похоже, вы продолжаете переписывать один и тот же
summary
объект, поскольку у него не должно быть несколькихobjects
с одинаковымkey
2. Можете ли вы объяснить, почему вы хотите это сделать? Как бы вы различали эти разные элементы с одним и тем же ключом?
Ответ №1:
У вас не может быть двух свойств с одинаковым именем; $foo->summary
должно ссылаться на одну вещь.
Что вы можете сделать, так это установить значение этого свойства в виде массива:
$response->node1->node2->summary = [];
А затем добавьте элементы в этот массив:
$response->node1->node2->summary[] = $summary;
Это точно так же, как установка обычной переменной, и массив можно использовать всеми одинаковыми способами.
(Все это, вероятно, было бы понятнее, если бы вы использовали классы для различных узлов, а не большое количество stdClass
объектов, но я воспользуюсь преимуществом сомнения и предположу, что у вас есть веская причина для того, чтобы сделать это таким образом.)