Как говорит страница руководства, на которую вы ссылаетесь, утверждение "объекты передаются по ссылке" не является хорошим описанием того, что происходит. Лучший способ думать об этом - это то, что «значение» объекта - это дескриптор, указатель или адрес чего-то, что существует в другом пространстве.
Независимо от того, назначаете ли вы его свойству объекта, элементу массива или обычной переменной, это «значение» остается неизменным, и изменения объекта видны везде, где вы на них смотрите. Копирование значения использует несколько байтов (размер указателя), но не дублирует память самого объекта.
В качестве окончательного пояснения, «запись» в «копировании при записи» относится к модификации существующего значения, после копирования его из одного места в другое. Таким образом, запись $foo = $bar
, где $bar
- массив, будет не дублировать память, используемую массивом, но впоследствии запись $foo[0]=1;
или $bar[0]=1
будет, поскольку необходимо различать две копии , Это на самом деле не входит в игру в вашем примере; в противном случае это был бы просто «указатель объекта», который был скопирован, поэтому потребовалось бы совсем немного дополнительной памяти.