Добавьте еще объект (стандартный класс) с тем же именем с помощью php

#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 объектов, но я воспользуюсь преимуществом сомнения и предположу, что у вас есть веская причина для того, чтобы сделать это таким образом.)