9

好的,所以我对 PHP VM 的了解相对幼稚,最近我一直在想一些事情。特别是在 PHP 中 Web 应用程序的请求生命周期是什么样的。我在这里找到了一篇文章,给出了很好的解释,但我觉得故事必须更多内容。

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

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

我真的希望我在这里遗漏了一些重要的东西......任何见解都非常感谢!

4

3 回答 3

6

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

不,那篇文章是准确的。缓存解析/编译结果的方法有很多种,但每次都会完整执行脚本。跨请求不保留类或静态变量的实例。从本质上讲,每个请求都会获得一个全新的、从未执行过的应用程序副本。

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

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

我真的希望我在这里遗漏了一些重要的东西......

你似乎什么都不担心。世界上每个 PHP 站点都默认以这种方式工作,并且绝大多数都不需要担心性能问题。

于 2013-01-06T15:09:21.577 回答
0

A static variable, like any other PHP variable only persists for the life of the script execution and as such does not 'live' anywhere. Persistence between script executions is handled via session handlers.

于 2013-01-06T15:10:29.147 回答
0

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

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

于 2013-01-06T15:09:29.490 回答