Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

 
liveinternet.ru: показано количество просмотров и посетителей

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
ывается "передачей по ссылке", 
в 
этом случае аргумент не является копией переменной, а "ссылается" на нее. Во 
вто- 
рой главе мы уже имели дело со ссылками. Вы можете заметить, что передача пара- 

метра по ссылке полностью соответствует синтаксису задания ссылочной переменной 

в PHP. 
Чтобы не забывать каждый раз писать & перед переменной, передавая ее функции, 
существует и другой, более привычный для программистов на Си++ синтаксис пере- 
дачи по ссылке. А именно, можно символ & перенести прямо в заголовок функции, 
вот так (листинг 11.5): 
Листинг 11.5. Передача параметров по ссылке (второй способ) 
function Test(&$a) 
{ echo "$a\n"; 

Часть III. Основы языка PHP 188 
$a++; 
echo "$a\n"; 
} 
.... 
$num=10; // $num=10 
Test($num); // а теперь $num=11! 
echo $num; // выводит 11! 
Советую вам, если вы абсолютно точно уверены в необходимости передачи парамет- 
ра именно по ссылке, использовать именно этот синтаксис, т. к. он значительно 
более 
"прозрачен" и, к тому же, убережет вас от множества ошибок, связанных с 
пропуском 
& в программе. 
Теперь, если вы в программе запустите функцию Test(), передав ей в пара- 
метрах не переменную (или ячейку массива), а непосредственное значение 
(например, константу 100), это у вас не получится: PHP выведет сообщение об 
ошибке. Таким образом, в качестве параметров, передаваемых по ссылке, 
можно задавать только переменные, но не непосредственные значения. 
Переменное число параметров 
Как мы уже знаем, функция может иметь несколько параметров, заданных по умол- 
чанию. Они перечисляются справа налево, и их всегда фиксированное количество. 
Однако иногда такая схема нас устроить не может. Например, пусть мы захотели 
на- 
писать функцию в стиле echo, т. е., функцию, которая принимает один или более 
параметров (сколько именно — неизвестно на этапе определения функции). Пусть 
она должна вывести эти параметры "лесенкой" — каждый следующий на новой стро- 
ке с отступом от предыдущего (согласен, пример немного надуман, но все же 
вполне 
подходит для иллюстрации функций с переменным количеством параметров). Вот как 
мы можем это сделать (листинг 11.6): 
Листинг 11.6. Переменное число параметров функции 
function myecho() 
{ for($i=0; $i\n"; // выводим элемент 
} 
} 
// отображаем строки "лесенкой" 
myecho("Меркурий", "Венера", "Земля", "Марс"); 

Глава 11. Функции и области видимости 189 
Обратите внимание на то, что при описании myecho() мы указали пустые скобки в 
качестве списка параметров, словно функция не получает ни одного параметра. На 
самом деле в PHP при вызове функции можно указывать параметров больше, чем 
задано в списке аргументов — в этом случае никакие предупреждения не выводятся 
(но если фактическое число параметров меньше, чем указано в описании, PHP 
выдаст 
сообщение об ошибке). "Лишние" параметры как бы игнорируются, в результате пус- 

тые скобки в myecho() позволяют нам в действительности передать ей сколько 
угод- 
но параметров. 
Для того чтобы все же иметь доступ к "проигнорированным" параметрам, существу- 
ют три встроенные в PHP функции, которые я сейчас подробно опишу. 
r int func_num_args() 
Возвращает общее число аргументов, переданных функции при вызове. 
r mixed func_get_arg(int $num) 
Возвращает значение аргумента с номером $num, заданного при вызове функции. 
Нумерация, как всегда, отсчитывается с нуля. 
r list func_get_args() 
Возвращает список всех аргументов, указанных при вызове функции. Думаю, что 
применение этой функции оказывается практически всегда удобнее, чем первых 
двух. 
Перепишем наш пример с применением последней функции (листинг 11.7): 
Листинг 11.7. Использование fuct_get_args() 
function myecho() 
{ foreach(func_get_args() as $v) { 
for($j=0; $j<@$i; $j++) echo " "; 
echo "$v
\n"; @$i++; } } // выводим строки "лесенкой" myecho("Меркурий", "Венера", "Земля", "Марс"); Мы используем здесь цикл foreach для перебора аргументов, а также оператор от- ключения ошибок @, чтобы PHP не "ругался" на то, что переменная $i не определена при первом "обороте" цикла. Часть III. Ос
 
<<-[Весь Текст]
Страница: из 287
 <<-