”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > FetchPHP:将 Javascript 的 Fetch 和 True Async 引入 PHP 的更新(现在具有超能力!)

FetchPHP:将 Javascript 的 Fetch 和 True Async 引入 PHP 的更新(现在具有超能力!)

发布于2024-11-04
浏览:959

FetchPHP : An Update To Bring Javascript

嘿,PHP 爱好者! ?还记得有一次您在深夜编码,用 PHP 处理 HTTP 请求,并想:“如果这像 JavaScript 的 fetch 一样简单就好了”?好吧,喝杯咖啡,准备好听一些令人兴奋的消息吧,因为 FetchPHP 2.0 已经到来,它将让您的 PHP HTTP 请求比运转良好的机器更顺畅!

起源故事:从 Fetch 到 Superpowered Fetch

想象一下:现在是 2023 年,我坐在我最喜欢的咖啡店里,喝着一杯超大拿铁咖啡……不,只是开玩笑。事实上,我当时正在家里,沉浸在《Elden Ring》的练习中,突然,灵感袭来。我想:“如果我们可以将 JavaScript 获取的简单性引入到 PHP 世界呢?”就这样,FetchPHP 诞生了。 (别担心,我先打完了那场boss。)

但这就是关于灵感的事情——它并不止于 1.0 版本。当我看到开发人员拥抱 FetchPHP 时,我意识到我们可以进一步挑战极限。所以,我把自己锁在我的编码洞穴里(好吧,这只是我的家庭办公室,但一段时间后感觉就像一个洞穴),喝了不健康的能量饮料,然后带着 FetchPHP 2.0 出现了。

FetchPHP 2.0 有什么新功能?

系好安全带,因为此更新包含比瑞士军刀更多的功能!以下是 2.0 版本中的内容:

  1. 真正的异步超级能力:还记得 PHP 中的异步感觉就像穿着人字拖跑马拉松吗?那些日子已经一去不复返了! FetchPHP 2.0 利用 PHP Fibers(感谢我们的兄弟包 Matrix)来提供真正的非阻塞并发。这就像给你的代码一双火箭靴! Matrix 是我自己构建的一个包,它通过利用 PHP Fibers 简化了异步任务管理。借助 Matrix,FetchPHP 可以前所未有地运行异步任务。

  2. JavaScript 开发人员,宾至如归:我们引入了类似 async()/await 的语法,这将使 JavaScript 开发人员感觉从未离开过家。它是如此熟悉,您可能会忘记您正在编写 PHP!

  3. Win 的流畅 API:构建请求现在比您最喜欢的咖啡师的拿铁艺术更流畅。受到 Laravel 的 HTTP 客户端的启发,将方法与我们新的流畅 API 结合在一起。太优雅了,几乎是自己写的!

  4. 类固醇上的错误处理:使用我们新的可定制ErrorHandler,管理错误不再是一场噩梦。即时暂停、恢复、重试或取消任务。这就像为您的 HTTP 请求配备了一台时间机器!

  5. Guzzle Who?:虽然我们仍然向 Guzzle 致敬(它在幕后为我们的同步请求提供支持),但 FetchPHP 2.0 将事情提升到了一个全新的水平。就像我们带 Guzzle 去健身房,喂它一些菠菜,并教它新技巧!

但是等等,还有更多

还记得在 1.0 版本中,我们对提出简单的请求感到兴奋吗?好吧,请按住键盘,因为 FetchPHP 2.0 已准备好像专业人士一样处理复杂的场景。让我们看几个会让您想要重写所有 HTTP 逻辑的示例(不用担心,我们不会判断您是否这样做):

// Async request with all the bells and whistles
async(fn () => fetch()
    ->baseUri('https://api.coolstartup.com')
    ->withHeaders(['X-API-Key' => 'supersecret'])
    ->withBody(json_encode(['feature' => 'awesome']))
    ->withProxy('tcp://localhost:8080')
    ->timeout(5)
    ->retry(3, 1000)
    ->post('/unicorns'))
    ->then(fn ($response) => processUnicornData($response->json()))
    ->catch(fn ($e) => logUnicornError($e));

看看那美女!它可以处理代理、重试、超时等,同时保持异步并且看起来很漂亮。

FetchPHP 与 Guzzle:您一直在等待的对决

现在,我知道你在想什么。 “但我已经使用 Guzzle 多年了!我为什么要换?”好吧,系好安全带,因为我们即将深入探讨为什么 FetchPHP 2.0 是 PHP HTTP 客户端的新重量级冠军。

1. 真正的异步电源

  • Guzzle:使用 Promises 进行异步操作。这就像寄出一只信鸽并希望它回来一样。
  • FetchPHP:利用 PHP Fiber 实现真正的非阻塞并发。得益于我的 Matrix 套件的强大功能,这就像拥有一支超音速喷气机团队可供您使用!

2. 宾至如归的语法

  • Guzzle:传统的 PHP 语法。它很熟悉,但可能会变得冗长。
  • FetchPHP:类似 JavaScript 的 async/await 语法。它非常直观,您会认为您正在编写前端代码(但具有 PHP 的所有功能)。

3. 流畅的API

  • Guzzle:提供了不错的 API,但对于复杂的操作可能感觉有点僵化。
  • FetchPHP:可链接的方法,即使是最复杂的请求也能读起来像一首美丽的诗。

4. 错误处理和任务管理

  • Guzzle:基于 Promise 的基本错误处理。
  • FetchPHP:使用可定制的 ErrorHandler 进行高级错误处理。即时暂停、恢复、重试或取消任务。这就像你的 HTTP 请求有一根魔杖。

5. 学习曲线

  • Guzzle:学习曲线更陡,特别是对于复杂的异步操作。
  • FetchPHP:如果您了解 JavaScript 的 fetch,那么您已经成功了一半。如果你不这样做,你会比你说“异步”更快地拿起它。

6. 性能

  • Guzzle:同步请求性能良好,异步请求性能不错。
  • FetchPHP:针对同步和异步请求进行了优化。这就像从自行车升级到火箭飞船一样。

这里有一个快速比较来说明这一点:

// Guzzle
$promise = $client->requestAsync('GET', 'http://httpbin.org/get');
$promise->then(
    function ($response) {
        echo 'I completed! ' . $response->getBody();
    },
    function ($exception) {
        echo 'I failed! ' . $exception->getMessage();
    }
);

// FetchPHP

// using async/await syntax
async(fn () => fetch('http://httpbin.org/get'))
    ->then(fn ($response) => echo 'I completed! ' . $response->body())
    ->catch(fn ($e) => echo 'I failed! ' . $e->getMessage());

// or directly using the ClientHandler class
use Fetch\Http\ClientHandler;

(new ClientHandler())
    ->async()
    ->get('http://httpbin.org/get');

看出区别了吗? FetchPHP 将现代 JavaScript 的优雅带入 PHP 世界,同时保持复杂应用程序所需的功能和灵活性。

为什么 FetchPHP 2.0 会让你质疑一切

想象一下您是一名指挥,您的 HTTP 请求就是您的管弦乐队。使用 Guzzle,您可以做得很好,但您只能一次演奏一种乐器。获取PHP 2.0?它将您变成一位大师,指挥异步请求的完整交响曲,每个请求都完美和谐地演奏。

这就是为什么 FetchPHP 2.0 是您永远不知道您需要的 HTTP 客户端:

  1. 真正的异步:我们不仅仅是用承诺来伪造它。这是真正的交易,由 PHP Fibers 和 Matrix 提供支持。
  2. 熟悉的语法:JavaScript 开发人员会感到宾至如归,而 PHP 开发人员会想知道为什么它并不总是那么容易。
  3. 灵活的错误处理:动态重试、暂停、恢复或取消请求。这就像对您的 HTTP 请求进行远程控制。
  4. 功能强大,但简单:复杂的操作现在就像订购披萨一样简单(也许甚至更容易,具体取决于您当地的披萨店)。

未来是光明的(异步)

FetchPHP 2.0 不仅仅是一个更新;这是我们在 PHP 中处理 HTTP 请求方式的一场革命。无论您是构建小型 API 还是需要处理数千个并发请求的大型系统,FetchPHP 2.0 都能为您提供支持。

那么,您准备好加入异步革命了吗?前往我们的 GitHub 存储库,给我们一颗星(我们喜欢这些!),然后开始让您的 PHP 应用程序更快、更高效,而且,我敢说,使用起来更有趣!

请记住,在 FetchPHP 2.0 的世界中,唯一的限制是您的想象力(也许还有您服务器的资源,但这是另一天的问题)。

祝您编码愉快,祝您的请求永远异步! ?✨


附注如果您遇到任何问题或有让 FetchPHP 变得更加出色的想法,请随时提出问题或提交拉取请求。让我们一次一个请求,让 PHP 世界变得更美好!

版本声明 本文转载于:https://dev.to/thavarshan/fetchphp-20-an-update-to-bring-javascripts-fetch-true-async-to-php-now-with-superpowers-3g1m?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何在不依赖框架的情况下确定 DOM 准备情况?
    如何在不依赖框架的情况下确定 DOM 准备情况?
    Document.isReady:DOM 就绪检测的本机解决方案依赖于 Prototype 和 jQuery 等框架来管理 window.onload 事件可能不会总是令人向往。本文探讨了确定 DOM 就绪情况的替代方法,特别是通过使用 document.isReady.查询 Document.is...
    编程 发布于2024-11-09
  • 如何在 Golang 中检索 XML 数组中的所有元素而不仅限于第一个元素?
    如何在 Golang 中检索 XML 数组中的所有元素而不仅限于第一个元素?
    在 XML 中解组数组元素:检索所有元素,而不仅仅是第一个当使用 xml.Unmarshal( 在 Golang 中解组 XML 数组时[]byte(p.Val.Inner), &t),您可能会遇到仅检索第一个元素的情况。要解决此问题,请利用 xml.Decoder 并重复调用其 Decode 方法...
    编程 发布于2024-11-09
  • 带有管理面板的轻量级 Rest Api,可轻松管理食物食谱。
    带有管理面板的轻量级 Rest Api,可轻松管理食物食谱。
    你好, ?所有这篇文章都是关于我刚刚在 Github 上发布的 Django Rest Framework API。 如果您正在寻找一些简单而高效的 API 来从管理面板管理食物食谱并将其返回以供客户端使用,那么此存储库适合您。 该代码是轻量级的,可以在任何低功耗迷你 PC(如 Raspberry...
    编程 发布于2024-11-09
  • 如何使用正则表达式匹配带有或不带有可选 HTTP 和 WWW 前缀的 URL?
    如何使用正则表达式匹配带有或不带有可选 HTTP 和 WWW 前缀的 URL?
    使用可选 HTTP 和 WWW 前缀匹配 URL正则表达式是执行复杂模式匹配任务的强大工具。当涉及到匹配 URL 时,格式通常会有所不同,例如是否包含“http://www”。 使用正则表达式的解决方案匹配带或不带“http://www”的 URL。前缀,可以使用以下正则表达式:((https?|f...
    编程 发布于2024-11-09
  • 如何在不依赖扩展名的情况下确定文件类型?
    如何在不依赖扩展名的情况下确定文件类型?
    如何在不依赖扩展名的情况下检测文件类型除了检查文件的扩展名之外,确定文件是 mp3 还是图像格式是很有价值的编程中的任务。这是一个不依赖扩展的全面解决方案:PHP >= 5.3:$mimetype = finfo_fopen(fopen($filename, 'r'), FILEINFO_MIME_...
    编程 发布于2024-11-09
  • 在 Go 中使用 WebSocket 进行实时通信
    在 Go 中使用 WebSocket 进行实时通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    编程 发布于2024-11-09
  • 除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    无需强制转换即可上下文转换为 bool您的类定义了对 bool 的显式转换,使您能够在条件语句中直接使用其实例“t”。然而,这种显式转换提出了一个问题:“t”在哪里可以在不进行强制转换的情况下用作 bool?上下文转换场景C 标准指定了四种值可以根据上下文转换为 bool 的主要场景:语句:if、w...
    编程 发布于2024-11-09
  • 在 JavaScript 中实现斐波那契数列:常见方法和变体
    在 JavaScript 中实现斐波那契数列:常见方法和变体
    作为开发人员,您可能遇到过编写函数来计算斐波那契数列中的值的任务。这个经典问题经常出现在编码面试中,通常要求递归实现。然而,面试官有时可能会要求具体的方法。在本文中,我们将探讨 JavaScript 中最常见的斐波那契数列实现。 什么是斐波那契数列? 首先,让我们回顾一下。斐波那契数...
    编程 发布于2024-11-09
  • 如何使用 .htaccess 更改共享服务器上的 PHP 版本?
    如何使用 .htaccess 更改共享服务器上的 PHP 版本?
    在共享服务器上通过 .htaccess 更改 PHP 版本如果您正在操作共享服务器并且需要更改 PHP 版本,可以通过 .htaccess 文件来做到这一点。这允许您为您的网站运行特定的 PHP 版本,同时服务器维护其默认版本。要切换 PHP 版本,请按照下列步骤操作:找到 . htaccess 文...
    编程 发布于2024-11-09
  • 如何在Ajax数据加载过程中显示进度条?
    如何在Ajax数据加载过程中显示进度条?
    如何在 Ajax 数据加载期间显示进度条处理用户触发的事件(例如从下拉框中选择值)时,通常使用异步检索数据阿贾克斯。在获取数据时,向用户提供正在发生某事的视觉指示是有益的。本文探讨了一种在 Ajax 请求期间显示进度条的方法。使用 Ajax 实现进度条要创建一个准确跟踪 Ajax 调用进度的进度条,...
    编程 发布于2024-11-09
  • TCJavaScript 更新、TypeScript Beta、Node.js 等等
    TCJavaScript 更新、TypeScript Beta、Node.js 等等
    欢迎来到新一期的“JavaScript 本周”! 今天,我们从 TC39、Deno 2 正式版本、TypeScript 5.7 Beta 等方面获得了一些针对 JavaScript 语言的巨大新更新,所以让我们开始吧! TC39 更新:JavaScript 有何变化? 最近在东京举行...
    编程 发布于2024-11-09
  • 为什么 Bootstrap 用户应该在下一个项目中考虑使用 Tailwind CSS?
    为什么 Bootstrap 用户应该在下一个项目中考虑使用 Tailwind CSS?
    Tailwind CSS 入门 Bootstrap 用户指南 大家好! ?如果您是 Bootstrap 的长期用户,并且对过渡到 Tailwind CSS 感到好奇,那么本指南适合您。 Tailwind 是一个实用程序优先的 CSS 框架,与 Bootstrap 基于组件的结构相比...
    编程 发布于2024-11-09
  • 组合与继承
    组合与继承
    介绍 继承和组合是面向对象编程(OOP)中的两个基本概念,但它们的用法不同并且具有不同的目的。这篇文章的目的是回顾这些目的,以及选择它们时要记住的一些事情。 继承的概念 当我们考虑在设计中应用继承时,我们必须了解: 定义:在继承中,一个类(称为派生类或子类)可以从另...
    编程 发布于2024-11-09
  • 如何在 JavaScript 中将浮点数转换为整数?
    如何在 JavaScript 中将浮点数转换为整数?
    如何在 JavaScript 中将浮点数转换为整数要将浮点数转换为整数,您可以使用 JavaScript内置数学对象。 Math 对象提供了多种处理数学运算的方法,包括舍入和截断。方法:1。截断:截断去除数字的小数部分。要截断浮点数,请使用 Math.floor()。此方法向下舍入到小于或等于原始数...
    编程 发布于2024-11-09
  • 标准字符串实现中的 c_str() 和 data() 是否有显着差异?
    标准字符串实现中的 c_str() 和 data() 是否有显着差异?
    标准字符串实现中的c_str()与data()STL中c_str()和data()函数的区别人们普遍认为类似的实现是基于空终止的。据推测,c_str() 总是提供以 null 结尾的字符串,而 data() 则不然。然而,在实践中,实现经常通过让 data() 在内部调用 c_str() 来消除这种...
    编程 发布于2024-11-09

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3