Область видимости переменных в PHP
Объявить переменную PHP можно в любом месте скрипта, но это не значит, что использовать её можно везде. Часть скрипта, где переменная доступна, называется её областью видимости, и таких областей три вида: local, global и static.
Глобальная и локальная область видимости
Область видимости переменной зависит от того, где вы её объявляете. Объявленная вне функции, она имеет область видимости global и недоступна внутри функций. Объявленная внутри функции, она имеет область видимости local и существует только для этой функции.
Переменная с глобальной областью видимости
$x создаётся вне myTest(), поэтому функция её не видит и не выводит никакого значения. Только echo вне функции показывает 5:
Вывод: PHP-скрипт
<?php
$x = 5;
function myTest() {
echo $x;
}
myTest();
echo $x;
?>
Переменная с локальной областью видимости
На этот раз $x создаётся внутри myTest(), поэтому 5 показывает только echo самой функции. Строке вне функции нечего выводить:
Вывод: PHP-скрипт
<?php
function myTest() {
$x = 5;
echo $x;
}
myTest();
echo $x;
?>
Ключевое слово global в PHP
Функция всё же может обратиться к глобальной переменной, если вы об этом попросите. Внутри функции напишите ключевое слово global перед именами переменных.
Использование ключевого слова global
С global $x, $y; функция работает непосредственно с внешними переменными, поэтому новое значение $y сохраняется и после завершения функции:
Вывод: PHP-скрипт
<?php
$x = 5;
$y = 10;
function myTest() {
global $x, $y;
$y = $x + $y;
}
myTest();
echo $y;
?>
Использование массива $GLOBALS
PHP также хранит все глобальные переменные в массиве с именем $GLOBALS[index]. Функция может читать и изменять их через этот массив, как и делает этот код:
Вывод: PHP-скрипт
<?php
$x = 5;
$y = 10;
function myTest() {
$GLOBALS['y'] = $GLOBALS['x'] + $GLOBALS['y'];
}
myTest();
echo $y;
?>
Ключевое слово static в PHP
Обычно переменные функции исчезают, как только она завершает работу. Но иногда нужно, чтобы локальная переменная дожила до следующего вызова, потому что её значение ещё понадобится. Просто добавьте ключевое слово static при первом её объявлении:
Использование ключевого слова static
Поскольку $x объявлена как static, каждый вызов продолжает с того места, где остановился предыдущий, поэтому вывод отсчитывает 0, 1, 2:
Вывод: PHP-скрипт
<?php
function myTest() {
static $x = 0;
echo $x;
$x++;
}
myTest();
echo "\n";
myTest();
echo "\n";
myTest();
?>