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

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

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

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
 начинается с 1! 
function GetMonthName($n) 
{ global $Monthes; 
return $Monthes[$n]; 
} 
. . . 
echo GetMonthName(2); // выводит "Февраль" 

Часть III. Основы языка PHP 192 
Согласитесь, массив $Monthes, содержащий названия месяцев, довольно объемист. 
Поэтому описывать его прямо в функции было бы, мягко говоря, неудобно. В то же 
время функция GetMonthName() представляет собой довольно преемлемое средство 
для приведения номера месяца к его словесному эквиваленту (что может потребо- 
ваться во многих программах). Она имеет единственный и понятный параметр: это 
номер месяца. Как бы мы это сделали без глобальных переменных? 
Массив $GLOBALS 
В принципе, есть и второй способ добраться до глобальных переменных. Это — ис- 
пользование встроенного в язык массива $GLOBALS. Последний представляет собой 
хэш, ключи которого есть имена глобальных переменных, а значения — их величи- 
ны. 
Этот массив доступен из любого места в программе — в том числе и из тела функ- 
ции, и его не нужно никак дополнительно объявлять. Итак, приведенный выше при- 
мер можно переписать более лаконично: 
// Возвращает название месяца по его номеру. Нумерация начинается с 1! 
function GetMonthName($n) { return $GLOBALS["Monthes"][$n]; } 
Кстати, тут мы опять сталкиваемся с тем, что не только переменные, но даже и 
мас- 
сивы могут иметь совершенно любую структуру, какой бы сложной она ни была. На- 
пример, предположим, что у нас в программе есть ассоциативный массив $A, 
элемен- 
ты которого — двумерные массивы чисел. Тогда доступ к какой-нибудь ячейке этого 

массива с использованием $GLOBALS мог бы выглядеть так: 
$GLOBALS["A"][First"][10][20]; 
То есть получился четырехмерный массив! 
Насчет $GLOBALS следует добавить еще несколько полезных сведений. Во-первых, 
как я уже говорил, этот массив изначально является глобальным для любой функции,
 
а также для самой программы. Так, вполне допустимо его использовать не только в 

теле функции, но также и в любом другом месте. Во-вторых, с этим массивом 
допус- 
тимы не все операции, разрешенные с обычными массивами. А именно, мы не мо- 
жем: 
r присвоить этот массив какой-либо переменной целиком, используя оператор =; 
r как следствие, передать его функции "по значению" — можно передавать только 
по ссылке. 
Однако остальные операции допустимы. Мы можем при желании, например, по од- 
ному перебрать у него все элементы и, скажем, вывести их значения на экран. И, 
на- 
конец, третье: добавление нового элемента в $GLOBALS равнозначно созданию новой 

глобальной переменной (конечно, предваренной символом $ в начале имени, ведь в 
самом массиве ключи — это имена переменных без символа доллара), а выполнение 

Глава 11. Функции и области видимости 193 
операции Unset() для него равносильно уничтожению соответствующей перемен- 
ной. 
А теперь я скажу нечто весьма интересное все о том же массиве $GLOBALS. Как вы 
думаете, какой элемент (то есть, глобальная переменная) всегда в нем 
присутствует? 
Это — элемент GLOBALS, "которая" также является массивом, и в "которой" также 
есть элемент GLOBALS... Так что же было первей — курица или яйцо (только не 
надо 
мне говорить, что первым был петух)? 
А собственно, почему бы и нет? С чего это мы все привыкли, что в большом содер- 

жится малое, а не, скажем, наоборот? Почему множество не может содержать себя 
же 
в качестве элемента? Очень даже может, и $GLOBALS — тому наглядный пример. 
В PHP версии 3 такая ситуация была чистой воды шаманством. Однако с появлением 
в 
четвертой версии PHP ссылок все вернулось на круги своя. На самом-то деле 
эле
 
<<-[Весь Текст]
Страница: из 287
 <<-