Передача значений по ссылке

Задача
Необходимо передать переменную в функцию, так чтобы эта переменная сохраняла любые изменения, происходящие с ее значением внутри функции.

Решение
Для того чтобы функция принимала аргументы по ссылке, а не по значению, поставьте символ & перед именем параметра в прототипе функции:

function wrap_html_tag(&$string, $tag = 'b') {
$string = "<$tag>$string";
}

Теперь нет необходимости возвращать строку, поскольку изменяется сам оригинал.

Обсуждение
Передача переменной в функцию по ссылке позволяет избежать работы по возвращению переменной и присваиванию возвращенного значения исходной переменной. Это также удобно, если вы хотите, чтобы функция возвращала в случае успеха или неудачи логические значения true или false, но в то же время она могла бы еще модифицировать
значения аргумента.

Можно выбирать между передачей параметра по ссылке или по значению – либо одно, либо другое. Другими словами, нельзя заставить PHP произвольно выбирать между передачей переменной по ссылке или по значению.

В действительности это утверждение не на 100% правда.


Если конфигурационная директива allow_call_time_pass_reference разрешена, то PHP разрешает не передавать значение по ссылке, если символ амперсанда предшествует имени переменной. Однако начиная с версии PHP 4.0 Beta 4 использование этой возможности не приветствуется, и
PHP предупреждает, что эта функциональность в будущем может быть исключена при использовании вызовов с передачей параметров по ссылке. Программистам следует быть внимательными.

Кроме того, если параметр объявлен для передачи по ссылке, то нельзя передавать строку (или число), иначе PHP завершит работу с фатальной ошибкой.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Возвращение более одного значения
Возвращение значений по ссылке
Возвращение информации об ошибке
Вызов переменных функций
Доступ к глобальной переменной внутри функции

Вернуться в раздел: PHP / 6. Функции