Глобальные переменные в PHP

Глобальными переменными являются переменные, которые доступны всей программе во всех ее контекстах. Отличие локальных переменных от глобальных в том, что они доступны только в том контексте, в котором определены. Например, переменные, определенные в теле функции, доступны только в теле этой функции.

Если внутри функции будет определена локальная переменная, имя которой соответствует имени глобальной переменной, это локальная переменная не будет иметь никакого отношения к глобальной. То есть — изменив значение локальной переменной, значение глобальной останется старым. При этом, локальные переменные после выполнения функции уничтожаются — создаются и уничтожаются при каждом вызове функции, а их область видимости расположена исключительно в блоке функции. Рассмотрим это на простом примере.

Пример:

$var = 20; // глобальная переменная
function abc(){
$var = 5; // локальная переменная в функции
echo «$var»;
}

abc(); // 5 — выведена локальная переменная с тем же именем, что и глобальная
echo «$var»; // 20 — выведена глобальная переменная

Есть в этом коде один недостаток. А именно: часто случаются такие ситуации, когда функцией нужно обработать как раз таки глобальные переменные. Для того, чтобы сделать из локальной переменной глобальную существует отдельная инструкция global. Это ключевое слово позволяет конвертировать локальную переменную в глобальную. Рассмотрим на примере.

Пример:

$first = 20;
$second = 30;
function sum(){
global $first, $second; // конвертируем локальные переменные с тем же именем в глобальные
$second = $first+$second; // изменили значение глобальной переменной через функцию
}

echo «$second»; // 30 — до вызова функции
sum();
echo «$second»; // 50 — значение глобальной переменной изменено через функцию

После того, как мы установили оператор global перед локальными переменными, все они будут ссылаться на переменные из глобального контекста. Соответственно все проведенные над ними операции будут влиять на значение глобальных переменных.

Массив $GLOBALS

Все переменные, созданные в глобальном контексте автоматически заносятся в массив $GLOBALS. Этот массив является штатной структурой языка. Однако для программиста обеспечен доступ к данным этого массива через индексы. Это ассоциативный массив, поэтому каждый индекс обладает строковым именем, равным имени глобальной переменной.

Пример:

$x = 5;
$y = 6;
$variable = «hello»;

echo $GLOBALS[‘x’]; // 5
echo $GLOBALS[‘y’]; // 6
echo $GLOBALS[‘variable’]; // hello

Массив $GLOBALS является одной из суперглобальных переменных, которых в языке PHP присутствует целый перечень. Это значит, что данные переменные обладают областью видимости в любом контексте.

Пример:

$s = 10;
$t = 33;

function math(){
$GLOBAL[«t»] = $GLOBAL[«t»] + $GLOBAL[«s»];
}

echo $t; // 33
math();
echo $t; // 43

Оба способа, как использование ключевого слова globals, так и доступ к суперглобальному массиву, одинаково работают с переменными. Однако для программиста проще использовать первый способ, так как придется писать меньше букв. Локальные переменные не обязательно могут быть частью тела функции. Также при объявлении их в циклах, они тоже являются локальными.

После того, как цикл отработает все свои итерации, его локальные переменные автоматически уничтожаются. Это является положительной стороной локального контекста, так как переменные не конфликтуют между собой, а программисту не нужно заботиться о том, что он может случайным образом из локального контекста влезть в глобальный и нарушить структуру программы.

Для того, чтобы отделить одноименные локальные переменные от глобальных, нужно всего лишь вписать их в локальный контекст. Нельзя просто скопировать глобальные переменные в функцию. Для этого и предусмотрен оператор global, после которого идет перечисление всех имен переменных, которые будут переведены в глобальные. Или можно использовать суперглобальный массив $GLOBALS. Это касается не только функций, но и циклов, в теле которых также объявляют локальные переменные.

Нужно также отметить тот факт, что глобальные переменные, перенесенные в параметры функции, также становятся локальными. Копируется лишь их значение, которое можно изменять любым способом, но глобальные переменные от этого не пострадают.

Образовательный портал 3TY.RU
Adblock
detector