首页  >  问答  >  正文

确认 PHP 静态变量不会跨请求持续存在

我正在寻找静态变量不存储在 PHP 请求之间的保证。以下是之前的问题:

跨多个 .php 页面的 PHP 静态变量

php 中的静态变量是否在请求中持续存在?

跨会话的静态变量

明确地说它们不是,但它们更多的是提供一种维护状态的方法,而不是对预期行为的具体讨论。

举个例子,如果我的 PHP 代码如下:

function myfunc()
{
    static $a=0;
    print $a++;
}

for ($i=0;$i<10;$i++) myfunc();

然后每次运行它时我都会得到 0123456789 的输出。我对 PHP 的直觉/理解使我相当确定情况一定如此。

在我自己的实验中,我将一个(预分叉)apache 关闭到一个子进程,以确保在请求之间不会记住该变量。正如我所期望的那样,它不会在请求之间被记住。但这只是 PHP 运行的一种场景。

我正在寻找的是:

指向官方文档的链接,该文档表示这是预期行为并且不会更改。 PHP 文档的相关部分没有明确提及这一点(注释中除外)。

或者,当跨请求(例如网络服务器或性能增强 PHP 框架)记住静态变量时,它可能不会清除静态变量以提高请求之间的速度。

P粉567281015P粉567281015378 天前747

全部回复(1)我来回复

  • P粉654894952

    P粉6548949522023-10-31 00:02:00

    PHP 不保留请求之间的应用程序状态。在 PHP 应用程序生命周期中,应用程序会根据每个请求重新执行。静态变量旨在当执行离开作用域时在局部函数作用域中保留变量的值。文档中没有任何地方提到静态变量旨在跨请求保留值。

    回复
    0
  • 取消回复