微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有关PHP范围的问题 – 来自Java程序员的观点

我仍然是PHP的新手,所以我试图理解PHP Web应用程序中的范围概念.

在Java世界中,Java Web应用程序 – 使用Java Server Pages(JSP)和向上 – 将允许Java Bean具有以下级别的范围:

>页面
>请求
>会议
>申请

试图将这些映射到PHP的作用域功能

>页面:不是真的,但是在调用函数之后,调用本地的对象被认为是’消失’,所以它有点像页面范围
>请求:使用“$_REQUEST超级全局(不确定这是怎么回事…… Cookie?隐藏字段?URL参数?”)
>会话:使用PHP的$_SESSION超级全局(其中一些文档和论坛反馈声明,出于安全原因,这不是放置敏感信息的好地方)
>应用程序:使用PHP的APC(Stack Overflow链接)

我完全出去吃午餐还是这些相似的?我知道,与允许共享的Java相比,PHP一个主要区别是PHP的[“Shared nothing”] [5]架构.

任何建议/指导/发人深省的修正都是最受欢迎的.

解决方法:

你走在正确的轨道上. PHP确实是Share-nothing.

在Web上下文中,PHP应用程序完整地为每个HTTP请求运行一次.这意味着解释器读取,解析和执行脚本的每个HTTP请求(这是简化的 – 使用像APC这样的操作码缓存消除了读取/解析开销).

PHPsuperglobals的形式将输入提供给脚本,例如$_REQUEST和$_SESSION. Superglobals与常规全局变量的不同之处在于它们在每个范围内都自动可用,因此不需要使用global关键字.

请求之间存在的任何数据都需要存储在外部.要跨用于维护用户状态的请求共享数据,通常使用$_SESSION,认情况下将其序列化并写入磁盘上的文件(但可以配置为使用内存缓存或数据库).要在会话之间共享的数据(我认为它类似于JSP世界中的应用程序范围)需要在外部某处隐藏.您可以使用内存缓存(如APC或内存缓存),或将平面文件写入磁盘,或将内容粘贴到数据库中,或使用您可以提出的任何其他方案.在一天结束时,没有任何内置的东西.

除了超全球,变量范围相当无聊.认情况下,变量位于创建它们的范围内.

要在非全局范围内引用全局变量(即:在函数内部),需要使用global关键字将符号导入本地范围. PHP以这种方式工作,使得更难以意外地破坏全局变量.

这个东西,甚至更多,涵盖了well in the manual.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐