PHP Annotated——2024 年 2 月至 3 月
欢迎来到 PHP Annotated 2 月至 3 月版!我们将回顾过去几个月 PHP 社区中最有趣的发展,包括精心挑选的新闻、文章、工具和视频。
亮点
- PHP 8.2.16 和 PHP 8.3.3 发布
🐛 这些更新都是错误修复。
Composer 已针对漏洞 CVE-2024-24821 进行了修补,在某些条件下,当在包含篡改过文件的目录中调用 Composer 时,会导致任意代码执行,从而提升本地权限、横向用户移动或恶意代码执行。
这些版本使工具变得更精简、更高效,是数十位贡献者和 Doctrine 维护者十多年来辛勤工作的结晶。
该工具的第一个稳定版本,用于自动升级和重构,包含新的 Zen 配置、新的自定义规则命令、自动化 PHP Set 以及与新项目的集成简化。
各种 PHP 版本使用情况的定期概述,基于客户端发送到 packagist.org 的数据(例如,当他们运行 composer update
命令时)。
简而言之,以下是过去六个月使用分布的变化情况:
PHP 7.* – 20.3%(2023 年为 29.7%)
PHP 8.* – 78.2%(2023 年为 69%)
该版本简化了测试双重创建,弃用 PHPDoc 注释,转而使用 PHP 8 注解,并逐步淘汰不太必要的功能。
PHP 核心
PHP 正在寻找三名工程师来处理即将发布的 PHP 8.4 分支。候选人必须承诺任期 3.5 年,并具备丰富的 PHP、Git 和 C 知识。
申请截止日期为 3 月 31 日。
该基金会目前与 10 名工程师签约,负责 PHP 的核心和基础设施工作,获得了主要 PHP 公司的赞助,并获得了受德国政府支持的基金的投资。
到 2024 年,基金会小组计划了几个重要项目,包含用于安装 PHP 扩展的新工具、安全审计和文档更新。
我 Roman Pronskiy,由 JetBrains 赞助担任该基金会的运营经理。观看我在 Laracon EU 的演讲,了解更多有关该基金会的信息:
作为一次尝试,PHP 基金会发起了 GitHub 讨论,直接响应社区对更加开放和便捷的沟通平台的请求。
PHP 基金会正在开发用于安装 PHP 扩展的新工具。在这段视频中,Brent Roose、James Titcumb 和 Roman Pronskiy 讨论了有关此工具的所有内容。
钩子已成为过去几年 PHP 中最大且讨论最多的 RFC 之一。 经过一轮讨论后,该提案的作者 Larry Garfield 和 Ilija Tovillo 对细节进行了重大更新。
完整列表中的一些显著变化:
如前所述,已移除
$field
。$foo =>
简写表达式已移除。现在的合法简写是:
public string $foo {
get => evaluates to a value;
set => assigns this value;
}
- set 简写(带有
=>
)现在意味着“替代为写入值”。非简写版本 (set { }
) 始终返回 void,因此必须自己分配该值。
增加以属性为中心而不是以方法为中心的要求的常见问题解答。
添加了问题解答,解释了为什么“virtual”不可行。
目前,允许使用 null 作为函数参数的默认值,即使参数声明了类型且不可为 null,也不会生成错误。
此外,在必需参数之前允许可选参数,存在轻微的不一致。例如,以下签名是有效的:
function foo(T1 $a, T2 $b = null, T3 $c) {} // 当前有效
Máté Kocsis 和 Gina P. Banyard 建议弃用此类声明并要求明确的可为 null 标记。这是不向后兼容的变更,但迁移过程相对简单并且可以自动化。
function foo(T $var = null) {} // 如果 RFC 通过,弃用警告
function foo(?T $var = null) {} // OK
注意:此更改影响了相当多的开源项目。可以使用此脚本或正则表达式来检查项目是否也受到影响。
Sara Golemon 建议向 cURL 扩展添加简单的 OOP 接口,以便为 PHP 提供更令人愉快的开箱即用 HTTP 客户端体验。
try {
(new \CurlHandle)->setOpt(YOUR_VOTE, true)->exec();
} catch (\CurlHandleException $exception) {
}
新函数 request_parse_body()
, 用于处理 PUT
和 PATCH
请求中的表单数据,自 PHP 8.4 起可用。
PHPStorm
Anastasia Shabalina 的新终端(测试版)已出现在 JetBrains IDE 中。
Brent Roose 的 AI 用于 PHP:如何让AI助手生成测试实现。
hammer-tools/php-hammer——该 PhpStorm 插件带来了一组有用的检查和快速修复。
工具
- php-static-analysis/attributes——注解用于静态分析。
Twitter thread 中的临时想法现在已经得到正确实现,这使得使用 PHP 8 注解而不是 PHPDoc 标签为函数和类指定类型元数据成为可能。
阅读 Carlos Granados 的博客文章使用 PHP 属性而不是注释进行静态分析,以了解此想法背后的动机,用例和局限性。
typhoon-php/typhoon——PHP 的终极类型系统和反射。包括抽象的 PHP 静态类型系统和 Typhoon 反射(原生 PHP Reflection 的替代方案)。
xepozz/internal-mocker——用于模拟 PHP 内部函数和内部类的工具。
yiisoft/hydrator——创建和填充支持类型转换、映射和解决依赖关系的对象。
coollabsio/coolify——Heroku、Netlify 和 Vercel 的开源和自托管替代品。
opencodeco/phpctl——基于 Docker(容器)的 PHP 开发环境。详见 PHPCTL 介绍。
hydephp/hyde——结合了 Laravel 的强大功能和 Markdown 的简洁性的静态站点生成器。
swoole/phpy——库,允许在 PHP 中使用 Python 函数和库,或者在 Python 中使用 PHP 的包。
SRWieZ/thumbhash——PHP 的 ThumbHash 实现,允许从图像文件中生成唯一、人类可读的标识符。
rryqszq4/ngx-php——内嵌 PHP 语言模块到 Nginx web 服务器。根据基准,是目前运行 PHP 最快的方式,比如 Swoole、RoadRunner 和 FrankenPHP 都要快。
crazywhalecc/static-php-cli——该工具使得为 Linux、macOS、FreeBSD 构建独立的 PHP 二进制文件成为可能,并且随着最近更新,Windows 系统也同样支持!
Symfony
Javier Eguiluz 的升级 Symfony 网站到 AssetMapper。
makinacorpus/DbToolsBundle——用于备份、恢复和匿名化数据的 Symfony Bundle。
Sergii Dolgushev 的 Syfmony App 做好 Swoole、RoadRunner 和 FrankenPHP 的准备(无需 AI 介入)。
🔈 Ryan Weaver and Oliver Davies 和 Beyond Blocks 播客第 10 集:Twig、Symfony 和 SymfonyCasts。
Danil 的使用 Symfony Workflows 实现异步状态机。
Nikolay Nikolov 的通过 Symfony 中的自定义事件实现逻辑解耦。
Laravel
- Laravel 11 来了
了解关于 Laravel 11 发行版的更多信息,可参考 Paul Redmond 的一系列文章:
Laravel 团队已宣布推出基于 ReactPHP 异步框架的 PHP 原生 WebSocket 协议实现。
Twitter:Ratchet 已停止维护,不支持新的 PHP 版本,该项目是 fork 了它吗?
本地开发环境现已支持 Windows 系统并推出了专业版。完全不需要处理任何包管理器,因为提供了所有预构建的内容。
想要了解 Pro 版本中的新特性,请参阅 Taylor Otwell 在 Laracon EU 2024 大会上的演讲。
亲爱的 Laravel 包作者们…——Muhammed Sari 就如何制作出更优秀的包提供了一些指导意见。
Nico Verbruggen 的 PHP Monitor 7.0 现已可用。
Martin JooHow 的如何在 Laravel 应用中测量性能。
Freek Van der Herten 的使用 PHP 生成状态徽章。
Benjamin Crozat 的 Laravel 中简化验证。
Curlwind——一款出色的工具,无需任何构建步骤即可加载 Tailwind 类。可以在此处找到源代码:stevebauman/curlwind。
HelgeSverre/extractor——为 Laravel 应用程序提供 AI 驱动的数据提取功能。
杂项
- Florian Engelhardt 的使用 PHP 处理十亿行记录!
十亿行挑战(The One Billion Row Challenge,简称 1BRC)是一项有趣的探索,旨在考察现代 Java 技术在从文本文件中聚合十亿行数据时所能达到的极限。
Florian 展示了如何使用 PHP 获得理想的结果。从一个朴素的方法开始,逐步演进到利用 ext-parallel 进行复杂的并行化处理。
Doeke Norg 的 PHP 中臭名昭著的 Repository 模式。
Sarah Morgan 的 PHP 8.3 让应用更快。
Jake Skii 的从新手到 XSS:我是如何凭借新手级漏洞黑掉 chess.com。
Kamil Ruczyński 的集成测试优化技巧。
Robert Landers 的 PHP 严格类型:难以做对。(该链接已失效)
Joey McKenzie 的探索开发者使用 PHP、公共 API 和啤酒的经验。
📺 PHP UK 大会 2024——所有的演讲录像。
📺 Andrew Cairns 的理解组合优于继承。
绝佳解释——必看之作!如果偏好阅读,也以博客文章形式提供。
Daniel Leech 的我的 PHP 问题——这读起来更像是 PHP 愿望清单,无论如何都是很棒的分析。
Vlad Reshetylo 的停止在现代 PHP 中使用老旧的闭包。有 4 种替换方法。
Tomas Votruba 的 Finalize Classes——自动化且安全。
会议
这些 PHP 活动都值得一去,有些活动仍在接受报告提案:
Laracon India——印度乌代浦,3 月 23 日至 24 日。
PHP[TEK] 2024——美国伊利诺伊州芝加哥,4 月 23 日至 25 日。
phpday 2024——意大利维罗纳,5 月 16 日至 17 日。
国际 PHP 会议——德国柏林,5 月 27 日至 31 日。
Laravel Live 丹麦 2024——丹麦哥本哈根,2024 年 8 月 22 日至 23 日。
Laracon 2024——美国德克萨斯州达拉斯,2024 年 8 月 27 日至 28 日。CFP 🆕
好玩
PHP 死了吗?🤔——这是个有趣的拼图,里面有一些漂亮的复活节彩蛋。能找到全部 8 个吗?
如果有任何有趣或有用的链接可以通过 PHP Annotated 分享,请在本文中发表评论或向我们发送推文。
本作品采用《CC 协议》,转载必须注明作者和本文链接