PHP: Массивы
Теория: Ссылки
Обычно функции, работающие с массивами, после обработки возвращают новый массив. Но бывает и по-другому. Как правило, в таких функциях не используется возврат. Они меняют исходный массив напрямую за счет использования ссылок. Например, к таким функциям относится сортировка:
Обратите внимание, что в коде выше мы не пишем $sortedNumbers = sort($numbers). Функция sort() не возвращает отсортированный новый массив. Вместо этого, она меняет массив, на который ссылается $numbers. Если изменение исходного массива прошло успешно, функция возвращает булево значение true, если неуспешно — false:
Кроме того, такие функции не умеют работать со значениями, которые не присвоены переменным. Так происходит, потому что на них нельзя получить ссылки:
С точки зрения устройства такие функции выглядят следующим образом:
В сигнатуре функции перед именем переменной ставится знак &, а в теле функции происходит прямое изменение без возврата.
Как лучше проектировать функции: с передачей по ссылке или по значению? В подавляющем большинстве случаев лучше использовать второй вариант. Удобнее работать с функциями, возвращающими значения — поведение программы становится более предсказуемым, потому что нет неконтролируемых изменений данных. Первый подход лучше просто никогда не использовать.
Изменение массивов напрямую сложнее в отладке, но в некоторых языках повышает эффективность работы. Если массив достаточно большой, то полное копирование окажется дорогой операцией. В реальной жизни веб-разработчика это почти никогда не считается проблемой, но знать об этом полезно.
.png)
