Выбор ответа Middle Функции, замыкания, генераторы обновлено

Передача по ссылке

Вопрос

Когда оправдана передача аргумента по ссылке function f(array &$data)?

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

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

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

Коротко

Правильный ответ: Когда функция должна изменить переменную вызывающего, как sort. Массивы и строки передаются с copy-on-write, копия возникает только при изменении, поэтому ссылка ради скорости не нужна и иногда мешает оптимизациям.

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

  1. Всегда для массивов, иначе они копируются при каждом вызове функции
  2. Для объектов, иначе их свойства нельзя изменить внутри функции
  3. Для ускорения передачи длинных строк, чтобы избежать их копирования
  4. Когда функция должна изменить переменную вызывающего, как sortправильный ответ

Разбор

Массивы и строки передаются с copy-on-write, копия возникает только при изменении, поэтому ссылка ради скорости не нужна и иногда мешает оптимизациям. Объекты передаются дескриптором, и изменения их свойств и так видны. Ссылка нужна, когда функция меняет саму переменную вызывающего: sort($arr), preg_match($p, $s, $matches), накопитель в рекурсии.

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

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