Выбор ответа Middle Массивы изнутри спрашивают часто обновлено

Копирование массива при присваивании

Вопрос

Что произойдёт при $b = $a;, если $a массив из миллиона элементов?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Данные не копируются, пока массив не изменят (copy-on-write). Массивы в PHP имеют семантику значения, но копирование ленивое: обе переменные указывают на одну структуру со счётчиком ссылок, и копия делается при первом изменении.

Варианты ответа

  1. Массив сразу копируется целиком в новую область памяти
  2. $b станет ссылкой на $a, и изменения будут общими
  3. Данные не копируются, пока массив не изменят (copy-on-write)правильный ответ
  4. Будет ошибка: массивы присваиваются только через array_slice

Разбор

Массивы в PHP имеют семантику значения, но копирование ленивое: обе переменные указывают на одну структуру со счётчиком ссылок, и копия делается при первом изменении. Поэтому передача массива в функцию дешёвая, если функция его не меняет. Ссылкой $b станет только при $b = &$a. Объекты, в отличие от массивов, передаются как дескриптор.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.