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

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

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

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
ySqrt($n) 
{ return $n*$n; 
} 
echo MySqrt(4); // выводит 16 
Сразу несколько значений функции, разумеется, возвратить не могут. Однако, если 

это все же очень нужно, то можно вернуть ассоциативный массив или же список, 
на- 
пример так (листинг 11.3): 
Листинг 11.3. Возвращение массива 
function Silly() 
{ return array(1,2,3); 
} 
// присваивает массиву значение array(1,2,3) 
$arr=Silly(); 
// присваивает переменным $a, $b, $c первые значения из списка 
list($a,$b,$c)=Silly(); 
В этом примере использован оператор list(), который мы уже рассматривали. 
Если функция не возвращает никакого значения, т. е. инструкции return в ней нет,
 
то считается, что функция возвратила ложь (то есть, false). Все же часто лучше 
вер- 
нуть false явно (если только функция не объявлена как процедура, или 
void-функция 
по Си-терминологии), например, задействуя return false, потому что это несколь- 

ко яснее. 

Часть III. Основы языка PHP 186 
Параметры по умолчанию 
Часто бывают такие случаи, что у некоторой разрабатываемой функции должно быть 
довольно много параметров, причем некоторые из них будут задаваться совершенно 
единообразно. Например, мы пишем функцию для сортировки массива. Тогда, кроме 
очевидного параметра — массива — хотелось бы также задавать и второй параметр, 
который бы указывал: сортировать ли в убывающем или в возрастающем порядке. 
При этом, скажем, мы знаем, что чаще всего придется сортировать в порядке 
убыва- 
ния. В этом случае мы можем оформить нашу функцию так: 
function MySort(&$Arr, $NeedLoOrder=1) 
{ ... сортируем в зависимости от $NeedLoOrder... 
} 
Теперь, имея такую функцию, можно написать в программе: 
MySort($my_array,0); // сортирует в порядке возрастания 
MySort($my_array); // второй аргумент задается по умолчанию! 
То есть, мы можем уже вообще опустить второй параметр у нашей функции, что бу- 
дет выглядеть так, как будто мы его задали равным 1. Как видно, значение по 
умол- 
чанию для какого-то аргумента указывается справа от него через знак равенства. 
За- 
метьте, что значения аргументов по умолчанию должны определяться справа налево, 

причем недопустимо, чтобы после любого из таких аргументов шел обычный "не- 
умолчальный" аргумент. Вот, например, неверное описание: 
// Ошибка! 
function MySort($NeedLoOrder=1, &$Arr) 
{ 
... сортируем в зависимости от $NeedLoOrder... 
} 
MySort(,$my_array); // Ошибка! Это вам не Бейсик! 
Передача параметров по ссылке 
Давайте рассмотрим механизм, при помощи которого функции передаются ее аргу- 
менты. Пусть, например, у нас есть такая программа: 
function Test($a) 
{ echo "$a\n"; 
$a++; 
echo "$a\n"; 
} 
. . . 
$num=10; 
Test($num); 

Глава 11. Функции и области видимости 187 
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! 
Такой способ передачи параметров исторически на
 
<<-[Весь Текст]
Страница: из 287
 <<-