Необходимо вернуть значение по ссылке, а не по значению. Это позволяет избежать создания еще одной копии переменной.
Синтаксис возвращения переменной по ссылке подобен синтаксису передачи ее по ссылке. Однако вместо размещения символа & перед параметром располагаем его перед именем функции:
function &wrap_html_tag($string , $tag = ' b ') {
return "<$tag>$string</$tag>";
}
Кроме того, при вызове функции нужно использовать оператор присваивания "=&", а не обычный оператор "="
$html =& wrap_html_tag($string);
В отличие от передачи значения в функцию, когда аргумент передается либо по значению, либо по ссылке, в данном случае не обязательно выбирать присваивание ссылки, а можно просто взять возвращенное значение. Достаточно заменить обычным оператором "=" оператор "=&", и PHP присвоит значение вместо ссылки.