4.3. Диапазоны
Для того чтобы избежать взаимного влияния переменных в различных функциях, в PHP имеется понятие диапазона. Каждая строка программного кода принадлежит к определенному диапазону. Так, код, находящийся внутри функции, принадлежит к диапазону функции. Код, расположенный вне функции, считается принадлежащим к глобальному диапазону. Диапазон - это свойство, которое определяет, какая таблица памяти используется для хранения переменных и какие из переменных являются доступными.
Переменные, объявленные в пределах диапазона функции, являются локальными переменными. Локальные переменные активны только в пределах функции и никогда не могут обрабатываться за ее пределами. Переменные, которые используются вне функции, являются глобальными переменными. В отличие от других языков программирования, глобальные переменные в PHP необязательно будут доступными вне глобального диапазона.
Программный код, приведенный в листинге 4.4, внутри функции assignName присваивает переменной name значение "Зеев", не меняя при этом значение переменной name в глобальном диапазоне. Имя локальной переменной после передачи функцией управления никогда больше не проявляется. Существуют два способа доступа к переменным глобального диапазона из функции: с помощью оператора global и массива GLOBALS. 
Листинг 4.4. Эксперименты с диапазоном

<?php
function assignName()
{
$name = "Зеев";
}
$name = "Леон"; assignName(); //Печатает Леон print($name);
?>

Оператор global позволяет работать глобальной переменной внутри пространства имен функции. После этого с переменной можно работать и вне функции. Любое изменение значения переменной сохраняется и после завершения выполнения функции. Аналогично, можно ссылаться на глобальные переменные через массив GLOBALS. Этот массив проиндексирован по именам, поэтому, создав переменную userName, ею можно манипулировать с помощью выражения $GLOBALS["userName"] в пределах функции.
В листинге 4.5 представлена функция printCity, задача которой заключается в распечатке названия города. Она предназначена для вывода на экран переменных capital. Здесь мы говорим о переменных во множественном числе, так как в действительности в данном сценарии присутствуют три переменные capital. Одна из них является глобальной, а две другие - локальными для функций California и Utah.

Листинг 4.5. Применение глобального диапазона

<?
$capital = "Вашингтон"; function Nation()
global $capital; printCity($capital);
function printCity($NameOfCity)
print("The city is $NameOfCity.<br>n");
function California()
$capital = "Сакраменто"; printCity($capital);
function Utah()
$capital = "Солт-Лейк-Сити"; printCity($capital);
Nation(); 
California();
Utah(); Nation();
?>

Запустив этот сценарий, вы убедитесь в том, что названия городов будут распечатаны в следующем порядке: Вашингтон, Сакраменто, Солт-Лейк-Сити и Вашингтон. Заметим, что присвоение переменной capital нового значения в функциях California и Utah показывает, что это совсем другие переменные. Переменные внутри функций California и Utah являются локальными, а переменная, хранящая значение Вашингтон, является глобальной.