Чаще всего ссылки используются в функциях, когда необходимы изменения во входных переменных.
Например стандартные функции сортировки в php вместо возвращения нового массива сортируют принимаемый.
К коду:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php // Объявим простою функцию. В качестве аргумента наша функция принимает ссылку на массив. function foo(array &$ar){ foreach($ar as $key => &$value){ // Внутри функции перебираем полученный по ссылке массив. Значение текущего элемента массива при переборе тоже берем ссылкой. echo "$key => $value "; // Демонстрационный вывод $value .= '_it_was_edit_by_link'; // Для демонстрации редактирования по ссылке, отредактируем значение элемента массива. } } // Зададим базовые переменные $a = 'a'; $b = 'b'; // Зададим массив, элементами которого будут ссылки на наши переменные $a и $b $arr = array(&$a, &$b); // Вызываем функцию. foo($arr); // Продемонстрируем изменения базовых переменных. Они были изменены через 3 уровня ссылок. echo "new: a = $a b = $b"; ?> |
В коде используется 3 уровня ссылок:
- Ссылки в массиве на наши базовые переменные. Т.е. элемент массива — ссылка на $a и $b. Строка 16;
- Использование ссылки в аргументе при объявлении функции foo(). Строка 4;
- Перебор массива функцией foreach с передачей внутрь перебора ссылки на значение элемента массива. Строка 5.
На самом деле если убрать ссылку из объявления функции (строка 4), то ничего не изменится. Т.к. внутрь функции попадет копия нашего массива, т.е. в элементах массива всё еще будут ссылки на $a и $b из глобальной области видимости.
Посмотреть результат выполнения кода и поэкспериментировать можно по ссылке