gpt4 book ai didi

PHP 作用域、$GLOBALS 和单例

转载 作者:可可西里 更新时间:2023-11-01 00:51:43 25 4
gpt4 key购买 nike

我很难回答一些非常基本的 PHP 问题。我看过的视频教程都是使用 PHP 的服务器端脚本的基础知识,但很少真正解释 PHP 的工作原理。

假设我们有 2 个用户同时从世界不同地区连接到同一个 LAMP 服务器,并且都在请求 Widget.php。

(a) Apache/PHP 如何有效地“复制 2 个实例”Widget.php 脚本及其依赖项,以便分别处理 2 个 HTTP 请求?

(b) 从上面的 (a) 部分开始,PHP 如何划分用户请求以将它们分开?如果 Widget.php 使用名为 $_SESSION['cheese'] 的 session 变量,PHP 如何为两个用户保持 cheese 的值分开?

(c) PHP $GLOBALS 是用户范围的还是应用程序范围的?意思是,对于全局变量 $GLOBALS['bread'],用户 1 和 2 是否都共享对它的相同引用,或者 PHP 是否像上面在 (b) 中对 session 变量所做的那样将它们分开)?

(d) PHP $GLOBALS 变量和实现单例设计的对象有什么区别?如果应用程序只能访问单例的 1 个实例,那么它不是全局的吗?是否应该考虑性能因素?

最佳答案

将 php 应用程序视为每次服务器请求它时执行的脚本,而不是作为存在于服务器内存中的应用程序。当 HTTP 请求进入脚本时,$_SESSION['cheese'] 对于请求它的用户来说是唯一的,因为 session ID 存储在客户端的浏览器 cookie 中。

全局变量只是具有脚本范围的变量,因此对于发送 HTTP 请求脚本范围的用户来说是相同的。单例是一个只能有一个实例的类,与全局的不同。

PHP 脚本是无状态的,因为当脚本完成执行时,对象持有的所有值都将丢失。使对象在执行之间持久存在的唯一方法是序列化到数据库或 session 或文件系统。

关于PHP 作用域、$GLOBALS 和单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5704227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com