Всегда ли foreach создает копию без ссылки в PHP?
-
04-07-2019 - |
Вопрос
Мне интересно, есть ли в PHP встроенная оптимизация. Обычно, когда вы вызываете foreach без ссылки, он копирует переданный массив и работает с ним. Что произойдет, если счетчик ссылок на этот массив будет только 1?
Скажите, например, если getData возвращает некоторый массив данных.
foreach(getData() as $data)
echo $data;
Поскольку массив, возвращаемый getData (), имеет только одну ссылку, не должен ли он просто использоваться ссылкой и не копироваться первым или php не имеет этой оптимизации?
Это похоже на простую оптимизацию, которая может помочь во многих плохо написанных кодах.
Решение
Я не могу сказать наверняка, но PHP обычно использует «копировать при записи», так что все является ссылкой до тех пор, пока вы не попытаетесь записать в нее, когда копия будет сделана, и вы напишите в копию. р>