关于 PHP 范围的问题 - 从 Java 程序员的角度来看

2024-04-30

我对 PHP 还很陌生,所以我试图理解 PHP Web 应用程序中的范围概念。

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

  • Page
  • Request
  • Session
  • 应用

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

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

我是完全出去吃午饭还是这些相当相似?我知道 PHP 的 [“Shared Nothing”][5] 架构与 Java 的架构之间的一个主要区别是允许共享。

欢迎任何建议/指导/发人深省的更正。


你走在正确的轨道上。 PHP 确实是不共享的。

在 Web 上下文中,PHP 应用程序针对每个 HTTP 请求完整运行一次。这意味着对于每个 HTTP 请求,解释器都会读取、解析并执行脚本(这是简化的 - 使用像 APC 这样的操作码缓存可以消除读取/解析开销)。

PHP 以以下形式将输入提供给脚本超全局变量 http://php.net/manual/en/language.variables.superglobals.php,例如 $_REQUEST 和 $_SESSION。超全局变量与常规全局变量不同,它们在每个作用域中自动可用,因此无需使用global关键词。

请求之间持续存在的任何数据都需要存储在外部。要跨请求共享数据以维护用户的状态,通常使用 $_SESSION,它默认被序列化并写入磁盘上的文件(但可以配置为使用内存缓存或数据库)。要在会话之间共享的数据(我认为这类似于 JSP 世界中的应用程序范围)需要存储在外部的某个地方。您可以使用 APC 或 memcache 等内存缓存,或者将平面文件写入磁盘,或者将内容保存在数据库中,或者使用您能想到的任何其他方案。归根结底,没有任何内置的东西。

除了超全局变量之外,变量作用域相当无聊。默认情况下,变量存在于创建它们的范围内。

要在非全局作用域(即:函数内部)引用全局变量,您需要使用以下命令将符号导入到局部作用域中:global关键词。 PHP 以这种方式工作可以使全局变量更难被意外破坏。

这些东西,还有更多,都被覆盖得很漂亮手册上写得很好 https://www.php.net/manual/en/language.variables.scope.php.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于 PHP 范围的问题 - 从 Java 程序员的角度来看 的相关文章

  • ZipArchive 提取 - 单个文件

    我有以下代码 ipaFile path file ipa iconFilePath Payload myapp app email protected cdn cgi l email protection the pathway to my
  • 会话过期时将部分视图重定向到登录页面

    是否有一种简单的方法可以在会话过期后将整个页面 而不仅仅是部分视图 重定向到登录页面 我已尝试以下解决方案 但无法使其工作 Net MVC Partial View 会话过期时加载登录页面 https stackoverflow com q
  • 在 ruby​​ 中使用 Blowfish 加密字符串返回的字符串比 php 中的相同过程要短

    这让我很困惑 当我尝试使用以下输入用 Blowfish 加密字符串时 key 某个键 输入 输入字符串 我得到以下结果 ruby 79af8c8ee9220bde php 79af8c8ee9220bdec2d1c9cfca7b13c6 我
  • 如何修复 Laravel 中未找到的“PDF”类

    在我的 Laravel 应用程序中遇到以下错误 CollaboPDFController php 第 14 行中的 FatalErrorException 未找到 PDF 类 这是我的ColaboPDFController php
  • C++ 相当于 PHP 的 pack()

    我的问题很简单 有没有类似 PHP 的pack and unpack C STL 中的函数 如果没有 是否有其他方法可以实现相同的目标 https www php net pack https www php net pack Thanks
  • WordPress 安装中发现的恶意 PHP 代码有什么作用?

    我能够解码在一些 WordPress 文件中找到的以下 PHP 脚本 只是出于好奇 有人可以告诉我这段代码实际上是做什么的吗 看起来它已经以某种方式复制到同一服务器上的其他 WordPress 安装中
  • PHP 中 file、file_get_contents 和 fopen 之间的区别

    我是 PHP 新手 我不太确定 两者之间有什么区别file file get contents and fopen 函数 什么时候应该使用其中一个而不是另一个 前两个 file http www php net manual en func
  • 在 Drupal 中选择性地删除页面的样式表

    我正在尝试为首页制作不同的布局 在此过程中 我声明了名为 front page css 和 page front tpl php 的新样式表 我正在使用加载responsive sidebar css 的 Zen 子主题 我想删除 resp
  • TCPDF / FPDI 可以接受 PDF 作为字符串吗?

    是否可以将 TCPDF 或 FPDI PDF 作为字符串提供 我有一个传入的 PDF 数组作为字符串 但无法写入磁盘 我在文档中找不到与此相关的任何内容 如果没有 是否有一种有效的方法来从内存或作为对象存储 读取这些 PDF 将它们喂给 F
  • $_REQUEST、$_GET、$_POST 哪一个最快?

    这些代码中哪一个会更快 temp REQUEST s or if isset GET s temp GET s else temp POST s REQUEST http php net manual en reserved variabl
  • Opencart 的 $this->config->get('module_var_name')

    我正在尝试自定义 Opencart 支付模块 我看到很多地方都使用了配置信息 但我找不到任何创建正在使用的变量的内容 我知道在管理页面中 如果我选择 paypal 标准 我可以设置所有 配置 信息 但我找不到强调它的 模型 是否有模型 我希
  • 根据类别 woocommerce 更改同一产品的默认变体值

    我正在研究一种根据其所属类别显示同一产品的默认变体值的方法 例如 我出售一张带有蓝色和红色选项的卡 当用户进入 一 类别时 我希望默认值为蓝色 如果他属于第二类 则该值将为红色 我发现了一个钩子woocommerce product def
  • 扫描 PHP 上传的病毒

    我目前正在使用以下代码来扫描作为申请表的一部分上传的文件 safe path escapeshellarg dir file command usr bin clamscan stdout safe path out int 1 exec
  • 在 PHP 中使用数组来比较用户名/密码

    我有以下 php 脚本 其中有一个用户名和密码 Username user1 Password pass1 if isset POST submitform Clean up the input values foreach POST as
  • PHP:如何检查总数。 URL 中的参数?

    我正在使用 REQUEST 检索参数 有没有办法找到总数 URL 中的参数 而不是检索每个参数然后进行计数 这将为您提供总数 分隔的 URL 查询参数 count explode SERVER QUERY STRING 如果您只想要唯一的参
  • 如何在 PHP >= 5.3 严格模式下向对象添加属性而不产生错误

    这必须很简单 但我似乎找不到答案 我有一个通用的 stdClass 对象 foo没有属性 我想添加一个新属性 bar尚未定义 如果我这样做 foo new StdClass foo gt bar 1234 严格模式下的 PHP 会抱怨 将属
  • 有关于 PHP 中的 V8JS 的文档吗?

    有没有关于V8JS的文档 我是否只需要标准 PHP 或一些扩展即可使用 V8JS 我将非常感谢有关 PHP 中的 V8JS 的任何信息 要求 PHP 5 3 3 和 V8 库和标头安装在正确的路径中 Install http www php
  • MySQL 正在将我的时间戳值转换为 0000-00-00

    我是 PHP 新手 目前仍在学习中 我认为我的注册表有问题 username password email全部成功插入MySQL registered and last seen不要 我以为我正在使用getTimestamp 错了 但它呼应
  • SimpleXML插入处理指令(样式表)

    我想集成一个XSL文件在一个XML给我的字符串php CURL命令 我试过这个 output XML gived me by curl option hotel simplexml load string output hotel gt a
  • MYSQL 按喜欢/不喜欢和受欢迎程度排序

    我有评论表 其中包括喜欢和不喜欢的内容 现在我在正确的顺序上遇到了问题 实际上 我的系统在顶部显示了最多点赞的评论 我正在 youtube 上寻找类似系统的东西 这意味着 100like 100dislikes 的评论的顺序高于 1 1 我

随机推荐