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

Обычно передача аргумента функции осуществляется по значению. Это озна­чает, что в функцию передается копия данных, а не сами данные. Если аргумент функции изменяется внутри тела функции, это не оказывает никакого влияния на значения переменных за ее пределами.

Зачастую возникает необходимость в том, чтобы функция могла возвращать измененное значение переменной, переданной ей в качестве аргумента. К при­меру, требуется разработать функцию, которая добавляет к переданной ей пере­менной строку и возвращает результат через ту же переменную. Соответствую­щий код должен был бы выглядеть следующим образом:

code: #php
<?php
function add_text($text) {
  $text .= "прекрасна";
}
 
$string = "Жизнь ";
add_text($string);
echo $string;
 
?>

Но при запуске этого примера будет выведена только строка «Жизнь», так как по умолчанию аргументы передаются по значению. Исправить эту ошибку можно при помощи единственного символа, который определяет передачу аргу­мента функции по ссылке. Таким символом является амперсанд (&):

code: #php
<?php
function add_text(&$text) {
  $text  .= "прекрасна";
}
 
$string =  "Жизнь ";
add_text($string);
echo $string;
?>

В данном примере в функцию передается ссылка на аргумент — переменную $string. Это означает, что при обращении внутри функции к переменной $text на самом деле происходит обращение к переменной $string. Таким об­разом, изменения, сделанные в теле функции, распространяются на данные ос­новного скрипта. Это демонстрирует пример.

code: #php
<HTML>
<HEAD>
<TITLE>Передача данных по ссылке</TITLE>
</HEAD>
<BODY>
<H1>Передача данных по ссылке </H1>
<?php
function add_text(&$text) {
  $text  .= "паники!";
}
 
$string = "Без ";
add_text($string);
echo $string;
?>
</BODY>
</HTML>
Как видно из рисунка, значение переменной, переданной по ссылке, изменено внутри функции: результат выполнения примера

При передаче данных по ссылке следует соблюдать осторожность, так как при неаккуратном использовании этой возможности можно внести в код про­граммы трудно обнаружимую ошибку. Именно поэтому по умолчанию принята передача данных по значению.

Книга: PHP в примерах. Купить книгу
Автор: Стивен Хольцнер. Переводчик: С. Банников
Поделиться:

Похожие статьи: