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

PHP静态变量持续多长时间?,php,class,session,static,Php,Class,Session,Static,PHP静态变量持续多长时间,即“PHP运行”持续多长时间?比如说,命令行程序有一个定义的开始和结束,但在web w/AJAX中,我不知道如何定义它 以下是我看到PHP脚本启动的3种方式 用户(重新查询PHP页面) Javascript调用PHP(AJAX) PHP通过头()调用更多PHP 在我的实际应用程序中,javascript通过AJAX调用php脚本,该脚本使用header()重新加载站点。这将被视为两种不同的运行。每个都有自己的静态变量,它们之间没有关联。这三个变量都是相同的 在每种情况

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

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

  • 用户(重新查询PHP页面)
  • Javascript调用PHP(AJAX)
  • PHP通过头()调用更多PHP

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

    这三个变量都是相同的

    在每种情况下,用户的浏览器都会对url发出http请求。运行时是从服务器接收请求到请求已满的时间

    在命令行中定义了开始和结束

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

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

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

    PHP静态(在过程中可以被视为“全局”)在您的任何情况下都不会持续存在

    在每一个脚本中,都会执行一个新的HTTP请求,Php变量状态将丢失。

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


    无论是静态变量还是非静态变量……如果您希望在这些请求中保持数据的持久状态,则必须将其保存在会话、cookie、数据库或缓存中。

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


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

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

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

  • 请求被发送到服务器,无论是通过用户、ajax、通过PHP的curl还是其他什么方式
  • 执行相关的PHP脚本,无论是作为web服务器上的模块、CGI工作进程还是其他选项
  • 执行脚本时,将创建并发送对请求的响应(如果有)
  • (可选)脚本继续执行其他一些作业,直到最终终止,此时其所有变量都将随之终止

  • PHP脚本在退出时停止,到达脚本末尾或失败。

    因此,假设我的Ajax调用调用file1.PHP,它包括file2.PHP,并安装一个ojbect来发送头。这将被视为两次。文件1只包含文件2,所以这是一次运行,但我调用header()来重新加载页面。这是第二次运行header()调用吗?它是从run1调用的。您的ajax调用生成一个执行file1.php的请求,包括file2.php的内容,该请求发送一个头,然后在run#1结束时终止。运行#1发送的重新加载头生成一个新请求(对于重新加载的页面),从而启动运行#2。如果run#2再次是对file1.php的另一个请求,那么它与run#1不同!在PHP中包含文件与发出另一个web请求不同。变量在
    include
    require
    调用之间持续存在,但它们不会通过
    curl
    调用传递,除非您使用其他数据共享方法,如数据库、cookie和会话。@zzbov,您对额外精度的评论是要说明
    包含
    要求
    在同一请求中,还是我的评论不清楚?我只是好奇,所以我可以衡量我的写作,谢谢。嗨,根据你上面的评论,静态变量(在PHP脚本中)会在对该PHP脚本的多次调用中保持不变吗?