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

Задача
Необходима локальная переменная для сохранения значений между вызовами функции.

Решение
Объявите переменную как статическую:

function track_times_called() {
static $i = 0;
$i++;
return $i;
}

Обсуждение
Функция запоминает переменную, объявленную как статическую. Поэтому при последовательных вызовах функций можно получить доступк значению сохраненной переменной. Функция pc_check_the_count(), показанная в примере 5.1, содержит статическую переменную, позволяющую отслеживать удары и мячи для отбивающего в бейсболе.

Пример 5.1. pc_check_the_count()
function pc_check_the_count($pitch) {
static $strikes = 0;
static $balls = 0;
switch ($pitch) {
case 'foul':
if (2 == $strikes) break; // при двух ударах
ничего не происходит
// в противном случае действует, как удар
case 'strike':
$strikes++;
break;
case 'ball':
$balls++;
break;
}
if (3 == $strikes) {
$strikes = $balls = 0;
return 'strike out';
}
if (4 == $balls) {
$strikes = $balls = 0;
return 'walk';
}
return 'at bat';
}
$what_happened = check_the_count($pitch);

Логика происходящего с отбивающим, зависящая от количества подач, содержится в операторе switch внутри функции pc_check_the_count().


Вместо этого можно вернуть количество ударов и мячей, пробежек или простоев, но тогда надо добавить соответствующий код проверки на отражения ударов, пробежки и простои.

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

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Обмен значениями без временных переменных
Операторы == и =: как избежать путаницы
Получение дампа содержимого переменных в виде строк
Сериализация данных сложных типов в виде строки
Совместное использование переменных процессами

Вернуться в раздел: PHP / 5. Переменные