САМОУЧИТЕЛЬ PHP 4




Передача параметров по ссылке


Давайте рассмотрим механизм, при помощи которого функции передаются ее аргументы. Пусть, например, у нас есть такая программа:

function Test($a)

{ echo "$a\n";

  $a++;

  echo "$a\n";

}

. . .

$num=10;

Test($num);

echo $num;

Что происходит перед началом работы функции Test()

(которая, кстати, не возвращает никакого значения, т.е. является в чистом виде подпрограммой или процедурой) — как выражаются программисты на Паскале? Все начинается с того, что создается переменная $a, локальная для данной функции (про локальные переменные мы поговорим позже), и ей присваивается значение 10 (то, что было в $num). После этого значение 10 выводится на экран, величина $a

инкрементируется, и новое значение (11) опять печатается. Так как тело функции закончилось, происходит возврат в вызвавшую программу. А теперь вопрос: что будет напечатано при последующем выводе переменной $num?

А напечатано будет 10 (и это несмотря на то, что в переменной $a

до возврата из функции было 11!) Ясно, почему это происходит: ведь $a — лишь копия $num,

а изменение копии, конечно, никак не отражается на оригинале.

В то же время, если мы хотим, чтобы функция имела доступ не к величине, а именно к самой переменной

(переданной ей в параметрах), достаточно при передаче аргумента функции перед его именем поставить & (листинг 11.4):

Листинг 11.4. Передача параметров по ссылке (первый способ)

function Test($a)

{ echo "$a\n";

  $a++;

  echo "$a\n";

}

$num=10;      // $num=10

Test(&$num);  // à òåïåðü $num=11!

echo $num;    // âûâîäèò 11!

Такой способ передачи параметров исторически называется "передачей по ссылке", в этом случае аргумент не является копией переменной, а "ссы­лается"

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




Содержание  Назад  Вперед