我还不熟悉PHP,所以我试图理解PHP Web应用程序中的范围概念。
在Java世界中,Java Web应用程序 - 使用Java Server Pages(JSP)和向上 - 将允许Java Bean具有以下级别的范围:
尝试将这些映射到PHP的范围界定功能:
我是完全出去吃午餐还是这些相似的?我知道一个主要的区别是PHP的[“Shared Nothing”] [5]架构与允许共享的Java相比。
欢迎任何建议/指导/清醒的修正。
答案 0 :(得分:5)
你走在正确的轨道上。 PHP确实是Share-Nothing。
在Web上下文中,php应用程序完整地为每个HTTP请求运行一次。这意味着解释器读取,解析和执行脚本的每个HTTP请求(这是简化的 - 使用像APC这样的操作码缓存消除了读取/解析开销)。
PHP以superglobals的形式将输入提供给脚本,例如$ _REQUEST和$ _SESSION。 Superglobals与常规全局变量的不同之处在于它们在每个范围内都可自动使用,因此无需使用global
关键字。
请求之间存在的任何数据都需要存储在外部。要跨用于维护用户状态的请求共享数据,通常使用$ _SESSION,默认情况下将其序列化并写入磁盘上的文件(但可以配置为使用内存缓存或数据库)。要在会话之间共享的数据(我认为它类似于JSP世界中的应用程序范围)需要在外部某处隐藏。您可以使用内存缓存(如APC或内存缓存),或将平面文件写入磁盘,或将内容粘贴到数据库中,或使用您可以提出的任何其他方案。在一天结束时,没有任何内置的东西。
除了超全球外,变量范围相当无聊。默认情况下,变量位于创建它们的范围内。
要在非全局范围内引用全局变量(即:在函数内部),您需要使用global
关键字将符号导入本地范围。 PHP以这种方式工作,使得更难以意外地破坏全局变量。
这些内容以及更多内容涵盖了well in the manual。
答案 1 :(得分:1)