Выбор ответа Middle Функции, замыкания, генераторы обновлено
Передача по ссылке
Вопрос
Когда оправдана передача аргумента по ссылке function f(array &$data)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Когда функция должна изменить переменную вызывающего, как sort. Массивы и строки передаются с copy-on-write, копия возникает только при изменении, поэтому ссылка ради скорости не нужна и иногда мешает оптимизациям.
Варианты ответа
- Всегда для массивов, иначе они копируются при каждом вызове функции
- Для объектов, иначе их свойства нельзя изменить внутри функции
- Для ускорения передачи длинных строк, чтобы избежать их копирования
- Когда функция должна изменить переменную вызывающего, как
sortправильный ответ
Разбор
Массивы и строки передаются с copy-on-write, копия возникает только при изменении, поэтому ссылка ради скорости не нужна и иногда мешает оптимизациям. Объекты передаются дескриптором, и изменения их свойств и так видны. Ссылка нужна, когда функция меняет саму переменную вызывающего: sort($arr), preg_match($p, $s, $matches), накопитель в рекурсии.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.