Необходимо передать переменную в функцию, так чтобы эта переменная сохраняла любые изменения, происходящие с ее значением внутри функции.
Для того чтобы функция принимала аргументы по ссылке, а не по значению, поставьте символ & перед именем параметра в прототипе функции:
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 завершит работу с фатальной ошибкой.