我仍然是PHP的新手,所以我试图理解PHP Web应用程序中的范围概念.
在Java世界中,Java Web应用程序 – 使用Java Server Pages(JSP)和向上 – 将允许Java Bean具有以下级别的范围:
>页面
>请求
>会议
>申请
>页面:不是真的,但是在调用函数之后,调用本地的对象被认为是’消失’,所以它有点像页面范围
>请求:使用“$_REQUEST超级全局(不确定这是怎么回事…… Cookie?隐藏字段?URL参数?”)
>会话:使用PHP的$_SESSION超级全局(其中一些文档和论坛反馈声明,出于安全原因,这不是放置敏感信息的好地方)
>应用程序:使用PHP的APC(Stack Overflow链接)
我完全出去吃午餐还是这些相似的?我知道,与允许共享的Java相比,PHP的一个主要区别是PHP的[“Shared nothing”] [5]架构.
任何建议/指导/发人深省的修正都是最受欢迎的.
解决方法:
你走在正确的轨道上. PHP确实是Share-nothing.
在Web上下文中,PHP应用程序完整地为每个HTTP请求运行一次.这意味着解释器读取,解析和执行脚本的每个HTTP请求(这是简化的 – 使用像APC这样的操作码缓存消除了读取/解析开销).
PHP以superglobals的形式将输入提供给脚本,例如$_REQUEST和$_SESSION. Superglobals与常规全局变量的不同之处在于它们在每个范围内都自动可用,因此不需要使用global关键字.
请求之间存在的任何数据都需要存储在外部.要跨用于维护用户状态的请求共享数据,通常使用$_SESSION,默认情况下将其序列化并写入磁盘上的文件(但可以配置为使用内存缓存或数据库).要在会话之间共享的数据(我认为它类似于JSP世界中的应用程序范围)需要在外部某处隐藏.您可以使用内存缓存(如APC或内存缓存),或将平面文件写入磁盘,或将内容粘贴到数据库中,或使用您可以提出的任何其他方案.在一天结束时,没有任何内置的东西.
除了超全球,变量范围相当无聊.默认情况下,变量位于创建它们的范围内.
要在非全局范围内引用全局变量(即:在函数内部),需要使用global关键字将符号导入本地范围. PHP以这种方式工作,使得更难以意外地破坏全局变量.
这个东西,甚至更多,涵盖了well in the manual.