编程

PHP 是无状态的

656 2023-11-28 03:31:00

PHP 在历史上是无状态的。

这主要是由于 HTTP 也是无状态的。每个 HTTP 请求都不知道之前的任何请求。

PHP 基本相同。在“传统”处理模型下,它会根据每个请求重建整个世界!没有全局状态。

语言比较

在本视频中,我们比较了其他流行的语言,并了解如何创建一个随着每个 web 请求而增值的全局变量。换句话说,有一种全局状态,你需要担心。

PHP 是不同的——甚至全局变量在每次请求时都会“重置”为其初始值。(不要将其与 $_GET$_POST$_SERVER 等超级全局变量混淆)。

优缺点

这使得 PHP 更容易使用——当 web 请求之间没有可能意外保存的状态时,代码所做的心智模型会简单得多。

然而,这也意味着我们需要在每个 web 请求上重新加载大量代码。PHP 的操作缓存缓解了这种情况,但在接受新的 web 请求时,它仍然不如已经加载了框架/代码那么高效。

此外,PHP 不能使用连接池之类的东西——每个 web 请求都需要与数据库、缓存和其他外部服务建立全新的连接。

幸运的是,这基本上很好——PHP 仍然很快!

更新的 PHP 模型

有一些新的运行 PHP 的方法——例如,使用 Swoole 或 RoadRunner,我们可以将 PHP 作为一个长时间运行的进程来运行。这更像其他编程语言,我们需要担心全局状态,但我们的好处是不必在每次请求时重新加载代码/框架。

Laravel 通过 Laravel Octane 使这种应用变得简单。然而,它仍然不是运行 PHP 的主流方式!考虑到 PHP 有多大,我不确定它会有多大。它很好,但不是银弹——一切都是一种权衡。

 

PHP