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

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

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

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


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

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

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

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

Кроме того, если параметр объявлен для передачи по ссылке, то нельзя передавать строку (или число), иначе PHP завершит работу с фатальной ошибкой.
Теги:
ссылке, string, передачей, значения, чтобы, значению, между, нельзя, передавать, строку, параметра, символ, Передача, функция, функции, функцию, выбирать, следует, амперсанда, завершит, иначе, число, заставить, произвольно, действительности, правда, директива, allow, параметров, reference, разрешена, разрешает, передачи, предшествует, вызовов
Добавлено: 21 Июля 2018 12:50:00 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...