#4.13 php Статические переменные
Primary tabs
Следует иметь в виду, что локальные переменные в функциях инициализируются при каждом ее запуске. Между вызовами функции значения локальных переменных не сохраняются. Это демонстрирует пример 1, в котором делается попытка использовать функцию track_count для увеличения значения внутреннего счетчика.
Пример 1. Попытка создания счетчика
<HTML>
<HEAD>
<TITLE>
Статические переменные
</TITLE>
</HEAD>
<BODY>
<H1>
Статические переменные
</H1>
<?php
function track_count()
{
$counter = 0;
$counter++;
return $counter;
}
echo "Значение счетчика : ", track_count (), "<BR>";
echo "Значение счетчика : ", track_count (), "<BR>";
echo "Значение счетчика : ", track_count (), "<BR>";
echo "Значение счетчика : ", track_count (), "<BR>";
echo "Значение счетчика : ", track_count (), "<BR>";
?>
</BODY>
</HTML>
Как видно из рис.1, попытка создания счетчика оказалась неудачной, так как значение переменной $counter теряется после каждого возврата из функции.

Для решения данной проблемы следует объявить переменную $counter как статическую. Статические переменные сохраняют свое значение между вызовами функции. Как видно из примера 2, единственное ключевое слово static превращает неработоспособный код в работающее приложение.
Пример 2. Работоспособный счетчик вызовов
<HTML>
<HEAD>
<TITLE>
Статические переменные
</TITLE>
</HEAD>
<BODY>
<H1>
Статические переменные
</H1>
<?php
function track_count()
{
static $counter = 0;
$counter++;
return $counter;
}
echo "Значение счетчика : ", track_count (), "<BR>";
echo "Значение счетчика : ", track_count (), "<BR>";
echo "Значение счетчика : ", track_count (), "<BR>";
echo "Значение счетчика : ", track_count (), "<BR>";
echo "Значение счетчика : ", track_count (), "<BR>";
?>
</BODY>
</HTML>
Рис. 2 демонстрирует, что теперь значение переменной $counter сохраняется между вызовами функции track_count.

- Log in to post comments
- 787 reads