PHP请求生命周期

时间:2013-01-06 15:06:01

标签: php zend-framework vm-implementation

好的,所以我对PHP VM的了解比较天真,最近我一直想知道一些事情。特别是,PHP中的Web应用程序的请求生命周期是什么样的。我发现了一篇文章here给出了一个很好的解释,但我觉得更多的是故事。

根据文章的解释,每次向服务器发出请求时都会解析并执行脚本!这对我来说似乎很疯狂!

我正在尝试通过编写一个利用许多PHP 5.3 / 5.4功能的小型微框架来学习PHP。因此,我开始考虑 static 的含义以及静态类变量的实际存在时间。我希望我的应用程序可以有 setup 阶段,该阶段能够将其结果缓存到具有 static 属性的类中。但是,如果在每个请求上解析并执行整个脚本,我就无法看到如何避免为每个请求运行应用程序初始化步骤!

我真的希望我在这里缺少一些重要的东西......任何见解都是非常苛刻的!

3 个答案:

答案 0 :(得分:5)

  

根据文章的解释,每次向服务器发出请求时都会解析并执行脚本!这对我来说似乎很疯狂!

不,那篇文章准确无误。有various ways缓存解析/编译的结果,但每次都完全执行脚本。在请求之间不保留类或静态变量的实例。从本质上讲,每个请求都会获得一个新的,前所未有的应用程序执行副本。

  

我没有看到如何避免为每个请求运行应用程序初始化步骤!

你不能,也不应该。您需要将应用初始化为每个请求的空白状态。您可以将一大堆数据序列化为$_SESSION,其中 在请求中保持不变,但您不应该这样做,直到您发现确实需要这样做。

  

我真的希望我在这里缺少一些重要的东西......

你好像什么都不担心。默认情况下,世界上每个PHP站点都以这种方式工作,绝大多数人都不必担心性能问题。

答案 1 :(得分:0)

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

如果你不习惯它,这听起来很疯狂,它有时适用于扩展和其他事情 - 你将状态保存在其他一些服务中,这样你就可以轻松运行几个PHP服务器实例。

答案 2 :(得分:0)

静态变量与任何其他PHP变量一样,仅在脚本执行的生命周期内持续存在,因此不会在任何地方“存在”。脚本执行之间的持久性通过session handlers处理。

相关问题