确认PHP静态变量不会在请求中保持不变

ADW*_*ADW 9 php

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

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

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

跨会话的静态变量

明确地说它们不是,但它们更多地是在提供维持状态的方式而不是对预期行为的具体讨论.

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

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

for ($i=0;$i<10;$i++) myfunc();
Run Code Online (Sandbox Code Playgroud)

然后每次运行它都会得到0123456789的输出.我对PHP的直觉/理解使我非常确定必须如此.

在我自己的实验中,我已经将一个(preforking)apache关闭到一个子节点,以确保在请求之间不记住该变量.正如我所料,请求之间不会记住它.但这只是PHP运行的一种情况.

我正在寻找的是:

链接到官方文档,说明这是预期的行为,不会改变.相关的PHP文档没有明确提到这一点(注释除外).

或者,在诸如Web服务器或性能增强PHP框架之类的请求中记住静态变量的示例,这些可能不会清除静态变量以提高请求之间的速度.

GWW*_*GWW 7

PHP不保留请求之间的应用程序状态.在PHP应用程序生命周期中,每个请求都会刷新应用程序.静态变量用于在执行离开作用域时保留变量在本地函数作用域中的值.文档中没有提到静态变量是为了保持跨请求的价值.

  • @FelipeCardosoMartins,`register_globals`什么都没有,从来没有与此有任何关系. (3认同)

Cyr*_* N. 2

PHP 的特殊性在于每个请求都会重新加载整个 PHP 代码。因此,静态方法/属性在每个新请求时都会获取其默认值。

确认“整个 php 代码在每个请求时都会重新加载”这一事实是,您可以找到类似于数据库访问的持久方法,以避免为每个请求建立与数据库的新连接(请参阅:mysql_pconnect