Область видимости переменных PHP
Область видимости переменных — это часть скрипта, в рамках которой переменная была определена и где к ней можно получить доступ.
В PHP имеется три области видимости переменных:
- глобальная
- локальная
- статическая
Локальные и глобальные переменные
Локальные переменные создаются внутри функции. К таким переменным можно обратиться только внутри данной функции. Например:
Пример
Попробуй сам »<?php
function myTest() {
$A = 7; // локальная переменная
echo "<p>Переменная A внутри функции: $A</p>";
}
myTest();
// использование A вне функции вызовет ошибку
echo "<p>Переменная A вне функции: $A</p>";
?>
В данном случае в функции myTest() определена локальная переменная $A. И из общего контекста мы не можем к ней обратиться, то есть написать echo $A; нельзя, так как область действия переменной $A ограничено функцией myTest(). Вне этой функции переменной $A не существует.
Как правило, локальные переменные хранят какие-то промежуточные результаты вычислений, как и в примере выше.
Переменная, объявленная вне функции, имеет ГЛОБАЛЬНУЮ ОБЛАСТЬ ПРИМЕНЕНИЯ и может быть доступна только вне функции:
Пример
Попробуй сам »<?php
$A = 5; // глобальная переменная
function myTest() {
// использование A внутри этой функции вызовет ошибку
echo "<p>Переменная A внутри функции: $A</p>";
}
myTest();
echo "<p>Переменная A вне функции: $A</p>";
?>
Примечание: Вы можете объявлять локальные переменные с одинаковыми именами в разных функциях, потому что локальные переменные распознаются только функцией, в которой они объявлены.
Ключевое слово global
Иногда требуется, чтобы переменная была доступна везде, глобально. Подобные переменные могут хранить какие-то общие для всей программы данные. Для определения глобальных переменных используется ключевое слово global
.
В следующем примере ключевое слово global
используется для доступа к глобальной переменной внутри функции:
Пример
Попробуй сам »<?php
$x = 7;
$y = 5;
function myTest()
{
global $x, $y;
$y = $x + $y;
}
myTest();
echo $y; // выведет 12
?>
Суперглобальная глобальная переменная
PHP также хранит все глобальные переменные в массиве с именем $GLOBALS[index]
. Индекс содержит имя переменной. Этот массив также доступен из функций и может использоваться для непосредственного доступа и обновления глобальных переменных.
Пример использования $GLOBALS
:
Пример
Попробуй сам »<?php
function test()
{
$foo = "локальная переменная";
echo '$foo в глобальной области видимости: ' . $GLOBALS["foo"] . "\n";
echo '$foo в текущей области видимости: ' . $foo . "\n";
}
$foo = "глобальная переменная";
test();
?>
Примечание: Суперглобальная или автоматическая глобальная переменная — это означает, что она доступна во всех контекстах скрипта. Нет необходимости выполнять global $variable; для доступа к ней внутри функции.
Статические переменные
На локальные переменные похожи статические. Они отличаются тем, что после завершения работы функции их значение сохраняется. При каждом новом вызове функция использует ранее сохраненное значение.
Для этого используйте ключевое слово static
при первом объявлении переменной:
Пример
Попробуй сам »<?php
function getCounter()
{
static $x = 0;
echo $x;
$x++;
}
getCounter();
getCounter();
getCounter();
?>
При каждом вызове функции статическая переменная по-прежнему будет содержать информацию, хранящуюся в ней с момента последнего вызова функции.