PHP: Область видимости переменных
Область видимости переменной - это контекст, в котором эта переменная определена. Большинство переменных PHP имеет единую область видимости. Эта единая область видимости (ее еще называют глобальной областью видимости) охватывает также подключаемые файлы:
<?php $a = 1; include 'main.inc'; ?>
В этом примере переменная $a будет доступна также внутри включенного скрипта - main.inc.
Локальные переменные
Определение пользовательской функции задает локальную область видимости для переменной, т.е. любая используемая внутри функции переменная по умолчанию ограничена локальной областью видимости функции (доступна только внутри функции в которой она определена). Как это работает: чтобы разделить переменные используемые в общем коде и переменные в функциях, PHP предоставляет отдельное хранилище для переменных внутри каждой функции. Такое разделение пространства для хранения подразумевает, что областью видимости, то есть областью, в которой доступно значение переменной, является локальное хранилище функции.
В примере ниже наглядно демонстрируется, что переменная, объявленная за пределами функции, не изменяется внутри функции. Пока не стоит стремиться понять, как работает функция, главное, что она имеет свой уникальный набор переменных:
<?php
/* глобальная область видимости */
$age = 30; // присвоить переменной age значение 30
function birth() {
// присвоить переменной age значение 1
$age = 1; // это локальная переменная - она видна только внутри функции
}
// Вызов функции
birth();
// выводим значение переменной age
echo $age; // => 30
?>
В результате исполнения этого фрагмента будет выведено: 30.
Внутри функции birth() выполняется присваивание переменной $age значения 1, но это не таже самая переменная, что была определена в глобальной области видимости. Поэтому, когда выполняется вывод на экран значения переменной $age, выводится первоначальное значение 30. Стоит отметить, что локальные переменные создаются в момент вызова функции и удаляются после окончания работы функции.
Если вы на самом деле захотите прочитать или изменить значение глобальной переменной (так называются переменные используемые в глобальной области видимости), а не локальной внутри функции birth(), она должна быть объявлена глобальной внутри определения функции.
С этой темой смотрят: