PHP静态变量持续多长时间?

时间:2011-07-14 20:09:46

标签: php class session static

PHP静态变量持续多长时间,即“PHP运行”持续多长时间?比如一个命令行程序,有一个定义的开始和结束,但在web w / AJAX中,我不知道如何定义它。

以下是我看到PHP脚本启动的3种方法。

  1. 用户(请求PHP页面)
  2. Javacript调用PHP(AJAX)
  3. PHP通过标题()
  4. 调用更多PHP

    在我的实际应用程序中,我有javascript通过AJAX调用php脚本,脚本使用header()重新加载网站。这将被视为两个不同的运行。每个都有自己的静态变量,不相关。

7 个答案:

答案 0 :(得分:19)

PHP变量在通过解释器运行的脚本的生命周期内持续存在。对于Web请求,这是处理请求的生命周期。您的三种情况都是对服务器的请求,因此处理相同:静态变量一直存在,直到脚本在处理请求后终止。

PHP(及其变量)对请求的生命周期:

  1. 通过PHP或者你有什
  2. 执行相关的PHP脚本,无论是作为Web服务器上的模块,CGI工作进程还是其他选项
  3. 执行脚本,创建并发送对请求(如果有)的响应
  4. (可选)脚本继续执行其他一些工作,直到最终终止,此时所有变量都随之消失。

答案 1 :(得分:2)

  

在命令行中有一个已定义的开始和结束。

在服务器上运行的PHP没有区别。当对脚本发出Web请求时,脚本会一直运行到脚本结束,或直到它崩溃或超时(可能还有其他类似问题)。

AJAX不运行服务器端。 AJAX是另一个客户端异步调用服务器资源。对于第一个请求,就身份验证,验证,输入检查等所做的一切都必须在每个后续请求中完成。 AJAX响应的不同之处在于PHP脚本很可能只返回所请求的内容

一个程序“坚持”的唯一时间就是它被告知继续前进。可以告诉PHP等待,并通过Web套接字执行操作,但这似乎超出了您的问题的范围。

答案 2 :(得分:2)

“PHP运行”总是从执行开始直到脚本结束。因此,如果您使用ajax调用PHP脚本或PHP通过header()调用另一个PHP,则每次调用都是单次运行。之前实例化的静态变量没有持久状态,将被重新定义。

静态变量与否......如果您希望在这些请求中拥有持久的数据状态,则必须将其保存在会话,cookie,数据库或缓存中。

答案 3 :(得分:2)

这取决于服务器设置。通常,当您发出请求时,会加载PHP解释器,解析脚本,服务器会吐出结果并销毁解释器。每个请求都会发生这种情况,无论它是来自用户浏览还是AJAX。这意味着“静态”变量仅在解释器被销毁之前有效,这又是每个请求的结尾。 (HTTP是无状态的)

“PHP通过标题()调用更多PHP是什么意思?”你指的是重定向吗?在这种情况下,这是一个新的请求。如果你的意思是“PHP通过include调用更多的PHP”,它通常不是一个新请求(边缘情况是你包括来自第三方的PHP脚本......危险而不推荐)。使用include,PHP只需在与原始脚本相同的上下文中加载和执行文件。

答案 4 :(得分:1)

这三个都是一样的。

在每种情况下,用户的浏览器都在为网址发出http请求。运行时是从服务器接收请求到完成填充的时间。

答案 5 :(得分:1)

PHP静态(在程序上可以被视为“全局”)在任何情况下都不会持久存在。

在每个中都执行一个新的HTTP请求,并且Php变量状态丢失。

答案 6 :(得分:1)

当您退出,到达脚本末尾或失败时,PHP脚本会停止。