Подтверждение того, что статические переменные PHP не сохраняются в запросах

Я ищу уверенность в том, что статические переменные НЕ хранятся между запросами PHP. Следующие предыдущие вопросы:

Статические переменные PHP на нескольких страницах .php

Сохраняются ли постоянные переменные в php по запросам?

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

ясно говорят, что они не являются, но они больше в контексте предоставления способа сохранить состояние, а не конкретное обсуждение того, что является ожидаемым поведением.

В качестве примера, если у меня есть PHP-код:

function myfunc() { static $a=0; print $a++; } for ($i=0;$i<10;$i++) myfunc(); 

то я получаю вывод 0123456789 каждый раз, когда я его запускаю. Мой инстинкт / понимание PHP дает мне уверенность, что это должно быть так.

В моих собственных экспериментах я закрыл (preforking) apache до одного ребенка, чтобы убедиться, что переменная не запоминается между запросами. Он не запоминается между запросами, как я ожидал. Но это только один сценарий, в котором работает PHP.

Я ищу:

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

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

Solutions Collecting From Web of "Подтверждение того, что статические переменные PHP не сохраняются в запросах"

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

Да, вы правы, статические переменные или любые переменные в PHP, за исключением $ _SESSION живет только через один запрос. Но вы можете сделать это, используя $ _SESSION;

 class MyClass { public static $a = 0; public static init() { self::$a = isset($_SESSION['a']) ? $_SESSION['a'] : 0; } public static printA() { self::increaseA(); print(self::$a); } public static increaseA() { self::$a++; $_SESSION['a'] = self::$a; } } myClass::init(); for ($i=0;$i<10;$i++) myClass::printA(); 

Особенность PHP заключается в том, что каждый запрос перезагружает весь PHP-код. Таким образом, статический метод / свойство получает значение по умолчанию для каждого нового запроса.

Подтверждение того факта, что «весь PHP-код перезагружается при каждом запросе», заключается в том, что вы можете найти устойчивый метод, например, для доступа к базе данных, чтобы не создавать новое соединение с вашей БД для каждого запроса (см.: Mysql_pconnect )