PHP请求生命周期

9
好的,我相对于PHP VM的知识还比较简单,并且最近一直在思考一个问题。特别是,如何处理web应用程序的PHP请求生命周期。我发现了一篇文章(戳这里),给出了很好的解释,但我认为还需要更多的探究。
从文章所述,每次向服务器发送请求时,脚本都会被解析并执行!这听起来有些不可思议!
我正试图通过编写一个小型的微框架来学习PHP,并充分利用许多PHP 5.3 / 5.4的特性。因此,我开始思考什么是“静态”的意义,以及静态类变量实际上存在的时间有多长。我希望我的应用程序可以有一个“设置”阶段,能够将其结果缓存到具有静态属性的类中。然而,如果整个脚本在每个请求中都被解析和执行,那么我无法避免为每个请求执行应用程序初始化步骤!
我真的很希望我在这里漏掉了重要的东西......任何见解都将不胜感激!
3个回答

7
根据文章的解释,每次向服务器发出请求时,脚本都会被解析和执行!这对我来说似乎很疯狂!
不,那篇文章是准确的。有各种缓存解析/编译结果的方法,但是脚本每次都会被完整地执行。没有类或静态变量的实例会跨请求保留。实质上,每个请求都会得到一个新的、从未执行过的应用程序副本。
我不明白如何避免为每个请求运行应用程序初始化步骤!
你不能,也不应该。你需要为每个请求初始化你的应用程序到某个空白状态。你可以将一堆数据序列化到$_SESSION中,它会跨请求保持,但在你发现确实需要这样做之前,你不应该这样做。
我只是真心希望我在这里漏掉了什么重要的东西......
你似乎在担心无关紧要的事情。世界上的每个PHP站点默认都是这样工作的,绝大多数人永远不需要担心性能问题。

2
我不明白为什么除了 PHP 的要求之外,我还需要从“空白”状态初始化我的应用程序。我想我可能是在担心一些无关紧要的事情,但与我习惯的 .NET MVC、Sinatra 和 Rails 相比,这似乎很奇怪。 - user131441
@John - 不要混淆语言和框架:Rails不是一种语言,.NET也不是一种语言,它们都是框架... PHP是一种语言,但也有针对PHP的框架,例如Symfony、ZF和CodeIgniter。 - Mark Baker

0

不,你没有错过任何东西。如果您需要保留某些应用程序状态,则必须使用DB、文件、Memcache等进行操作。

虽然这听起来有些疯狂,但对于扩展和其他方面来说,有时候是很好的选择 - 您可以将状态保存在其他服务中,因此可以轻松运行几个PHP服务器实例。


0
一个静态变量,就像任何其他PHP变量一样,只在脚本执行的生命周期内持续存在,因此它并没有“存活”在任何地方。脚本执行之间的持久性通过会话处理程序来处理。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接