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()
, она должна быть объявлена глобальной внутри определения функции.
С этой темой смотрят: