Как в PHP передавать параметр функции по ссылке?

как в php передавать параметр функции по ссылке?

Практическая ценность ссылок

Параметры, принимаемые функцией – это посредники между реальными значениями, переданными функции при вызове, и значениями доступными внутри её тела. Если внутри функции вы попробуете изменить параметр, принявший при вызове переменную, то это не будет иметь никакого эффекта по отношению к состоянию самой переменной. PHP интерпретатор создает копии переданных в функцию значений, именно этими копиями вы и оперируете.

//Создаем переменную для попытки изменения в теле функции
$testVariable = 'Тестовая строка';

//Функция пытается изменить значение переданной переменной
//и осуществляет вывод в браузер
function changeString($string) {
    $string = $string .' :дополнение<br>';
    echo $string;
}

changeString($testVariable);
//Результат: Тестовая строка :дополнение

echo $testVariable;
//Результат: Тестовая строка

PHP дает возможность обойти такое поведение с помощью ссылок. Ссылка — это указатель на значение, хранящееся в другой переменной. Изменение значения в переменной-хозяине влечет за собой изменение и всех ссылок, установленных на неё. Обратное утверждение тоже верно.

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

Чтобы функция могла работать с реальными значениями переменных, при её определении перед именем параметра необходимо поставить оператор передачи по ссылке «&». Функция, в определении параметров которой указан оператор передачи по ссылке, не будет осуществлять копирование переданных в них значений. Все изменения, внесенные в данный параметр в процессе работы, будут зафиксированы в реальной переменной.

//Создаем переменную для изменения внутри функции
$welcome = 'Андрей';

//Функция принимает строку по ссылке и добавляет в
//неё приветствие
function setFullGreeting(&$string) {
    $string = 'Добро пожаловать, '. $string .'!';
}

setFullGreeting($welcome);
echo $welcome;
//Результат: Добро пожаловать, Андрей!

Нужно ввести одно уточнение: Если вы определили какой-либо параметр функции как ссылку, то при вызове в него можно передать только переменную или массив, так как ссылки могут быть установлены только на них. Если вы попробуете передать литерал (пример. «someFunction('строковой литерал');»), то ваш код выбросит ошибку.

Заметка
Ссылки замедляют работу функций. Уменьшение производительности незначительно, но все лучше применять их только по необходимости. На самом деле использование ссылок в параметрах функции так редко необходимо при написании PHP-скриптов, что присутствие данного поведения в вашем коде может запутать других программистов.

Последние публикации