好的,所以我对PHP VM的了解比较天真,最近我一直想知道一些事情。特别是,PHP中的Web应用程序的请求生命周期是什么样的。我发现了一篇文章here给出了一个很好的解释,但我觉得有更多的是故事。
根据文章的解释,每次向服务器发出请求时都会解析并执行脚本!这对我来说似乎很疯狂!
我正在尝试通过编写一个利用许多PHP 5.3 / 5.4功能的小型微框架来学习PHP。因此,我开始考虑 static 的含义以及静态类变量的实际存在时间。我希望我的应用程序可以有 setup 阶段,该阶段能够将其结果缓存到具有 static 属性的类中。但是,如果在每个请求上解析并执行整个脚本,我就无法看到如何避免为每个请求运行应用程序初始化步骤!
我真的希望我在这里缺少一些重要的东西......任何见解都是非常苛刻的!
答案 0 :(得分:5)
根据文章的解释,每次向服务器发出请求时都会解析并执行脚本!这对我来说似乎很疯狂!
不,那篇文章准确无误。有various ways缓存解析/编译的结果,但每次都完全执行脚本。在请求之间不保留类或静态变量的实例。从本质上讲,每个请求都会获得一个新的,前所未有的应用程序执行副本。
我没有看到如何避免为每个请求运行应用程序初始化步骤!
你不能,也不应该。您需要将应用初始化为每个请求的空白状态。您可以将一大堆数据序列化为$_SESSION
,其中 在请求中保持不变,但您不应该这样做,直到您发现确实需要这样做。
我真的希望我在这里缺少一些重要的东西......
你好像什么都不担心。默认情况下,世界上每个PHP站点都以这种方式工作,绝大多数人都不必担心性能问题。
答案 1 :(得分:0)
不,你没有遗漏任何东西。如果您需要保留某些应用程序状态,则必须使用DB,文件,Memcache等来执行此操作。
如果你不习惯它,这听起来很疯狂,它有时适用于扩展和其他事情 - 你将状态保存在其他一些服务中,这样你就可以轻松运行几个PHP服务器实例。
答案 2 :(得分:0)
静态变量与任何其他PHP变量一样,仅在脚本执行的生命周期内持续存在,因此不会在任何地方“存在”。脚本执行之间的持久性通过session handlers处理。