Когда в PHP перед именем переменной ставится символ &, парсер знает, что тем самым передается не сама переменная, а ссылка на нее. Это понятие может восприниматься с трудом, поэтому давайте вернемся к метафоре со спичечным коробком, которая использовалась . Представьте, что вы не вынимаете клочок бумаги из коробка, не читаете то, что на нем написано, не копируете эту надпись на другой клочок бумаги, не возвращаете оригинал в коробок и не передаете копию функции, а просто привязываете нитку к исходному клочку бумаги и передаете функции второй конец этой нитки (см. рис. 5.2). Теперь, для того чтобы найти данные, к которым она обращается, функция может проследовать по нитке. Таким образом исключаются все издержки на создание копии переменной, предназначенной только для того, чтобы в функции можно было воспользоваться ее значением. Более того, теперь функция может изменить значение переменной. Пример. ?php $a1 = "WILLIAM"; $a2 = "henry"; $a3 = "gatES"; echo $al . " " . $a2 . " " . $a3 . "<br />"; fix_names($a1, $a2, $a3); echo $a1 . " " . $a2 . " " . $a3; function fix_names (&$n1, &$n2, &$n3) { $n1 = ucfirst(strtolower($n1)); $n2 = ucfirst(strtolower($n2)); $n3 = ucfirst(strtolower($n3)); } ?> Вместо того чтобы передавать строки непосредственно функции, сначала они присваиваются в качестве значений переменным и выводятся на экран, для того чтобы посмотреть их состояние «до». Затем, как и раньше, вызывается функция, но теперь перед именем каждого параметра. ставится символ &, предписывающий PHP передать ей только ссылки на значения переменных. Теперь к переменным $n1, $n2 и'$n3 привязаны «ниточки», ведущие к значениям переменных $a1, $a2 и $аЗ. Иными словами, существует одна группа значений, но два набора имен переменных, позволяющих к ним обратиться. Поэтому функции fix_names нужно только присвоить новые значения переменным $n1, $n2 и $n3, для того чтобы обновить значения переменных $a1, $а2 и $a3. В результате выполнения этого кода будут выведены следующие строки: WILLIAM henry gatES William Henry Gates Как видите, в обеих инструкциях echo используются только значения переменных $a1, $а2 и $a3.
|