PHP Annotated——2024 年 2 月至 3 月

欢迎来到 PHP Annotated 2 月至 3 月版!我们将回顾过去几个月 PHP 社区中最有趣的发展,包括精心挑选的新闻、文章、工具和视频。

亮点

🐛 这些更新都是错误修复。

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(), 用于处理 PUTPATCH 请求中的表单数据,自 PHP 8.4 起可用。

PHPStorm

工具

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

Laravel

  • Laravel 11 来了

了解关于 Laravel 11 发行版的更多信息,可参考 Paul Redmond 的一系列文章:

Laravel 团队已宣布推出基于 ReactPHP 异步框架的 PHP 原生 WebSocket 协议实现。

Twitter:Ratchet 已停止维护,不支持新的 PHP 版本,该项目是 fork 了它吗?

本地开发环境现已支持 Windows 系统并推出了专业版。完全不需要处理任何包管理器,因为提供了所有预构建的内容。

想要了解 Pro 版本中的新特性,请参阅 Taylor Otwell 在 Laracon EU 2024 大会上的演讲。

杂项

十亿行挑战(The One Billion Row Challenge,简称 1BRC)是一项有趣的探索,旨在考察现代 Java 技术在从文本文件中聚合十亿行数据时所能达到的极限。

Florian 展示了如何使用 PHP 获得理想的结果。从一个朴素的方法开始,逐步演进到利用 ext-parallel 进行复杂的并行化处理。

绝佳解释——必看之作!如果偏好阅读,也以博客文章形式提供。

会议

这些 PHP 活动都值得一去,有些活动仍在接受报告提案:

好玩


如果有任何有趣或有用的链接可以通过 PHP Annotated 分享,请在本文中发表评论或向我们发送推文

php
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!