|
Глобальные переменные, в
отличие от локальных, доступны в любой
точке программы. Но чтобы изменить значение
глобальной переменной, необходимо
специально объявить ее как глобальную в
соответствующей функции. Для этого перед
именем переменной ставится ключевое слово
GLOBAL. Пример:
$somevar = 15;
function addit() {
GLOBAL $somevar;
$somevar++;
print "Somevar is
$somevar";
}
addit();
Будет выведено значение $somevar, равное 16.
Допустим, вы забыли включить следующую
строку:
GLOBAL
$somevar;
В этом случае $somevar будет присвоено
значение 1, поскольку эта переменная будет
считаться локальной по отношению к функции
addit( ). Локальная переменная по умолчанию
инициализируется 0, а затем к ней
прибавляется 1; таким образом, будет
выведено значение 1.
Альтернативный способ объявления
глобальных переменных связан с
использованием массива РНР $GLOBALS( ). Давайте
вернемся к предыдущему примеру и
воспользуемся этим массивом для объявления
глобальной переменной $somevar: $somevar = 15;
function addit() {
$GLOBALS["somevar"];
$somevar++;
}
addit();
print "Somevar is $somevar";
Каким бы способом ни обеспечивалась
глобальная видимость переменной, помните,
что неосторожное использование глобальных
переменных нередко приводит к неожиданным
результатам, причиняющим немало хлопот
программистам. Таким образом, хотя
глобальные переменные очень удобны, при их
использовании необходима умеренность.
Статические переменные
Последний тип видимости переменных
называется статическим.
В
отличие от переменных, объявленных
параметрами и уничтожаемых при выходе из
функции, статическая переменная сохраняет
свое значение при повторном вызове. Для
объявления статической переменной перед ее
именем ставится ключевое слово STATIC:
STATIC $somevar;
Рассмотрим пример:
function keep_track() {
STATIC $count = 0;
$count++;
print $count;
print "<br>";
}
keep_track();
keep_track();
keep_track();
Как будут выглядеть результаты работы
этого сценария? Если бы переменная $count не
была объявлена
статической (то есть являлась локальной),
результат выглядел бы так:
1
1
1
Но поскольку переменная $count является
статической, при каждом вызове функции
будет сохраняться ее предыдущее значение,
поэтому результат будет таким:
1
2
3
Статические переменные особенно удобны
при написании рекурсивных
функций
— особого класса функций, которые
многократно вызывают сами себя до
выполнения некоторого условия. Рекурсивные
функции рассматриваются в главе 4. |