GuzzleHTTP/Promises 用于 PHP:完整指南与示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

GuzzleHTTP/Promises 用于 PHP:完整指南与示例

\n\n

欢迎阅读关于 GuzzleHTTP/Promises 库用于 PHP 语言的详细指南。该库是 Guzzle 生态系统中的关键组成部分之一,为异步编程提供了强大的“Promise”模式实现。如果您正在处理 HTTP 请求、并行任务,或者只是想让您的 PHP 代码更高效、更易读——那么这篇文章就是为您准备的。

\n\n

1. 这是什么以及为什么需要它

\n\n

GuzzleHTTP/Promises 是一个 PHP 库,实现了 Promise 的概念和异步任务执行。它是 Guzzle 生态系统的一部分,但可以完全独立于 HTTP 客户端使用。Promise 的核心思想是,您创建一个对象,该对象代表一个异步操作的结果,这个结果可能现在、稍后或永远不会获得。这使得您可以编写在等待长时间操作完成时不会阻塞程序执行的代码。

\n\n

为什么 PHP 需要这个?传统上,PHP 是一种同步语言,每个操作都按顺序执行。然而,随着微服务、API 集成和与外部服务协作的日益普及,有效管理并行任务的需求出现了。GuzzleHTTP/Promises 解决了这个问题,它允许您同时运行多个操作(例如,向不同 API 发送多个 HTTP 请求),并在它们完成时处理结果,而无需等待所有操作依次完成。

\n\n

该库提供了处理异步代码的完整工具集:创建 Promise、合并 Promise、调用链、错误处理以及超时管理。它实际上是 PHP 社区中异步工作的标准,并用于 Laravel、Symfony、WordPress(通过插件)等流行项目中,当然也包括 Guzzle HTTP 客户端本身。

\n\n

2. 安装

\n\n

通过 Composer(PHP 的标准包管理器)安装该库。在您项目的根目录下,在终端中执行以下命令:

\n\n
composer require guzzlehttp/promises
\n\n

如果您使用 Guzzle HTTP 客户端,Promise 库已包含在其依赖项中,无需单独安装。安装后,请确保在您的脚本中包含了 vendor/autoload.php 文件:

\n\n
require 'vendor/autoload.php';
\n\n

3. 快速入门——最小工作示例

\n\n

让我们创建一个使用 Promise 的简单示例。我们将创建一个 Promise,它在 1 秒后“执行”并返回字符串 "Hello, World!":

\n\n
use GuzzleHttp\\Promise\\Promise;\nuse GuzzleHttp\\Promise\\Utils;\n\n// 创建一个新的 Promise\n$promise = new Promise(function () use (&$promise) {\n    // 模拟异步操作\n    usleep(1000000); // 1 秒\n    $promise->resolve('Hello, World!');\n});\n\n// 为成功执行添加处理程序\n$promise->then(function ($value) {\n    echo "收到: " . $value . PHP_EOL;\n});\n\n// 启动 Promise 的执行\nUtils::queue()->add(function () use ($promise) {\n    $promise->wait();\n});\n\n// 运行队列\nUtils::queue()->run();
\n\n

这个示例演示了基本机制:创建 Promise、解析它(resolve)以及通过 then 方法处理结果。

\n\n

4. 主要方法/函数/类

\n\n

让我们详细查看库中的 8 个以上关键组件,并附上描述和示例。

\n\n

4.1. 类 GuzzleHttp\\Promise\\Promise

\n\n

签名: new Promise(callable $waitFn = null, callable $canceller = null)

\n\n

功能: 创建一个新的 Promise。可选地接受一个等待函数 ($waitFn),该函数在调用

推荐