Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Мова РНР.Питання до заліку.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

Ключевое слово global

Сначала пример использования global:

Пример #1 Использование global

<?php $a = 1; $b = 2; function Sum() {     global $a, $b;     $b = $a + $b; }  Sum(); echo $b; ?>

Вышеприведенный скрипт выведет 3. После определения $a и $b внутри функции как global, все ссылки на любую из этих переменных будут указывать на их глобальную версию. Не существует никаких ограничений на количество глобальных переменных, которые могут обрабатываться функцией.

Второй способ доступа к переменным глобальной области видимости - использование специального, определяемого PHP массива $GLOBALS. Предыдущий пример может быть переписан так:

Пример #2 Использование $GLOBALS вместо global

<?php $a = 1; $b = 2; function Sum() {     $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b']; }  Sum(); echo $b; ?>

$GLOBALS - это ассоциативный массив, ключом которого является имя, а значением - содержимое глобальной переменной. Обратите внимание, что $GLOBALS существует в любой области видимости, это объясняется тем, что $GLOBALS является суперглобальным. Ниже приведен пример, демонстрирующий возможности суперглобальных переменных:

Пример #3 Суперглобальные переменные и область видимости

<?php function test_global() {     // Большинство предопределенных переменных не являются     // "супер", и чтобы быть доступными в локальной области     // видимости, функции требуют указания 'global'.     global $HTTP_POST_VARS;          echo $HTTP_POST_VARS['name'];          // Суперглобальные переменные доступны в любой области     // видимости и не требуют указания 'global'.     // Суперглобальные переменные доступны, начиная с PHP 4.1.0, а     // использование HTTP_POST_VARS считается устаревшим.     echo $_POST['name']; } ?>

Замечание:

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

Использование статических (static) переменных

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

Пример #4 Демонстрация необходимости статических переменных

<?php function test() {     $a = 0;     echo $a;     $a++; } ?>

Эта функция довольно бесполезна, поскольку при каждом вызове она устанавливает $a в 0 и выводит 0. Инкремент переменной $a++ здесь не играет роли, так как при выходе из функции переменная $a исчезает. Чтобы написать полезную считающую функцию, которая не будет терять текущего значения счетчика, переменная $a объявляется как static:

Пример #5 Пример использования статических переменных

<?php function test() {     static $a = 0;     echo $a;     $a++;

} ?>

Теперь $a будет проинициализирована только при первом вызове функции, а каждый вызов функции test() будет выводить значение $a и инкрементировать его.

Статические переменные также дают возможность работать с рекурсивными функциями. Рекурсивной является функция, вызывающая саму себя. При написании рекурсивной функции нужно быть внимательным, поскольку есть вероятность сделать рекурсию бесконечной. Вы должны убедиться, что существует адекватный способ завершения рекурсии. Следующая простая функция рекурсивно считает до 10, используя для определения момента остановки статическую переменную $count:

Пример #6 Статические переменные и рекурсивные функции

<?php function test() {     static $count = 0;     $count++;     echo $count;     if ($count < 10) {         test();     }     $count--; } ?>

Замечание:

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

Пример #7 Объявление статических переменных

<?php function foo(){     static $int = 0;          // верно     static $int = 1+2;        // неверно  (поскольку это выражение)     static $int = sqrt(121);  // неверно  (поскольку это тоже выражение)     $int++;     echo $int; } ?>

Замечание:

Статические объявления вычисляются во время компиляции скрипта.

Замечание:

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