Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Vtoraya_chast_uchebnika_po_WWW_Okonchat_variant...doc
Скачиваний:
31
Добавлен:
27.09.2019
Размер:
6.06 Mб
Скачать

4.5.2. Предопределённые переменные и суперглобальные массивы

Предопределённость означает автоматическое (без участия программиста) создание переменных или массивов с заранее известными свойствами.

Начиная с версии 4.1.0, PHP предоставляет набор предопределенных массивов, содержащих переменные Web-сервера (если возможно), среды окружения и пользовательские среды. Эти новые массивы очень специфичны, так как являются автоматически глобальными, то есть доступными в любой области действия. По этой причине их часто называют 'автоглобалами' или 'суперглобалами'.

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

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

Кратко перечислим другие автоглобальные массивы: $_SERVER, $_GET, $_POST, $_COOKIE, $_FILES, $_ENV, $_REQUEST, $_SESSION. Использование этих переменных будет рассмотрено в следующей части пособия о создании Web-приложения.

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

Пример 4‑17

//Пример - использование суперглобального массива

//c целью сделать переменные глобальными внутри функции

//Использование $GLOBALS вместо global:

$c = 10;

$d = 20;

function Test4()

{

$GLOBALS["d"] = $GLOBALS["c"] + $GLOBALS["d"];

}

Test4();

echo $d, "<br>";

?>

4.5.3. Статические переменные

Локальные переменные в функциях инициализируются при каждом её запуске (вызове), то есть значение всех локальных переменных пропадают. Более того, исчезает соответствие между именем переменной и ячейкой, в которой находилось значение этой переменной. Другими словами, между вызовами функций значения локальных переменных не сохраняются. Однако в некоторых случаях требуется сохранение некоторых переменных.

Для решения данной проблемы необходимо объявлять такие переменные статическими с помощью ключевого слова static. Пример (Пример 4-18) иллюстрирует проблему (функция неработающего счётчика) и её разрешение (функция работающего счётчика). Один счётчик пытается подсчитать, а другой действительно считает число обращений к функции счётчика.

Пример 4‑18

<body>

<H1>

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

</H1>

<?php

// Неработающий счётчик

function nerabSchetchik()

{

$ichislo = 0;

$ichislo++;

return $ichislo;

}

//Работающий счётчик

function rabSchetchik()

{

static $ichislo = 0;

$ichislo++;

return $ichislo;

}

?>

<H2>

Результат работы счётчика без использования статической переменной

</H2>

<?php

echo "Значение счётчика = ", nerabSchetchik(), "<br>";

echo "Значение счётчика = ", nerabSchetchik(), "<br>";

echo "Значение счётчика = ", nerabSchetchik(), "<br>";

?>

<H2>

Результат работы счётчика c использованием статической переменной

</H2>

<?php

echo "Значение счётчика = ", rabSchetchik(), "<br>";

echo "Значение счётчика = ", rabSchetchik(), "<br>";

echo "Значение счётчика = ", rabSchetchik(), "<br>";

?>

</body>