|
овы языка PHP 190
Локальные переменные
Наконец-то мы подошли вплотную к вопросу о "жизни и смерти" переменных. Дейст-
вительно, во многих приводимых выше примерах мы рассматривали аргументы
функции (передаваемые по значению, а не по ссылке) как некие временные объекты,
которые создаются в момент вызова и исчезают после окончания функции. Например
(листинг 11.8):
Листинг 11.8. Локальные переменные (параметры)
$a=100; // Глобальная переменная, равная 100
function Test($a)
{ echo $a; // выводим значение параметра $a
// Этот параметр не имеет к глобальной $a никакого отношения!
$a++; // изменяется только локальная копия значения, переданного в $a
}
Test(1); // выводит 1
echo $a; // выводит 100 — глобальная $a, конечно, не изменилась
В действительности такими же свойствами будут обладать не только аргументы, но
и
все другие переменные, инициализируемые или используемые внутри функции. Вот
пример (листинг 11.9):
Листинг 11.9. Локальные переменные
function Silly()
{ $i=rand(); // записывает в $i случайное число
echo $i; // выводит его на экран
// Эта $i не имеет к $i никакого отношения!
}
for($i=0; $i!=10; $i++) Silly();
Здесь переменная $i в функции будет не той переменной $i, которая используется
в
программе для организации цикла. Поэтому, собственно, цикл и проработает только
10 "витков", напечатав 10 случайных чисел (а не будет крутиться долго и упорно,
по-
ка "в рулетке" функции rand() не выпадет 10.
Собственно говоря, это нас устраивает. Действительно, мало ли какие имена пере-
менных использует функция для своих личных целей... Какое до этого дело
програм-
ме (которая вообще может быть написана другим человеком)? Вот и получается, что
каждая функция — "узник" в своем тесном мирке, живущий и обменивающийся с
"окружающим миром" через свои параметры и возвращаемое значение.
Глава 11. Функции и области видимости 191
Глобальные переменные
Если вы, прочитав последние строки, уже начали испытывать сочувствие к функциям
в PHP (или, если вы прикладной программист, сочувствие к разработчикам PHP), то
спешу вас заверить: разумеется, в PHP есть способ, посредством которого функции
могут добраться и до любой глобальной переменной в программе (не считая,
конечно,
передачи параметра по ссылке). Однако для этого они должны проделать определен-
ные действия, а именно: до первого использования в своем теле внешней
переменной
объявить ее "глобальной" (листинг 11.10):
Листинг 11.10. Использование global
function Silly()
{ global $i;
$i=rand();
echo $i;
}
for($i=0; $i!=10; $i++) Silly();
Вот теперь-то переменная $i будет везде едина: что в функции, что во внешнем
цик-
ле (для последнего это приведет к немедленному его "зацикливанию", во всяком
слу-
чае, на ближайшие несколько минут, пока rand() не выкинет 10). А вот еще один
пример, который показывает удобство использования глобальных переменных внутри
функции (листинг 11.11):
Листинг 11.11. Пример функции
$Monthes[1]="Январь";
$Monthes[1]="Февраль";
... и т. д.
$Monthes[12]="Декабрь";
. . .
// Возвращает название месяца по его номеру. Нумераци
|
|