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

Следует иметь в виду, что локальные переменные в функциях инициализируются при каждом ее запуске. Между вызовами функции значения локальных переменных не сохраняются. Это демонстрирует пример 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 теряется после каждого возврата из функции.



Рис. 1. Неработающий счетчик вызовов

Для решения данной проблемы следует объявить переменную $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.



Рис. 2. Работоспособный счетчик вызовов

Key Words for FKN + antitotal forum (CS VSU):