欢迎来到 PHP Annotated 十二月!在这期中,我们回顾了过去一个月 PHP 社区中最有趣的发展,精选了新闻、文章、工具和视频。
亮点
PHP 8.1.27、PHP 8.2.14 和 PHP 8.3.1 已发布
这些更新都是修复错误。PHP 8.1 分支已经结束其积极支持的阶段,现在只会接收安全修复更新。
FrankenPHP 1.0 发布
FrankenPHP 是用 Go 编写的现代化 PHP 应用服务器。只需一个命令,就能提供生产级别的 PHP 服务器。内置对 Symfony、Laravel、WordPress 等框架的原生支持。请观看 FrankenPHP 的视频概述。
Laravel Octane 现已支持 FrankenPHP。
PHP_CodeSniffer 的未来
CodeSniffer 的原始维护者决定放弃该项目,但幸运的是,一位著名的社区成员 Juliette Reinders Folmer 将开发转移到了一个新的专用组织 PHPCSStandards。该工具的工作将在 PHPCSStandards/PHP_CodeSniffer 中继续进行。Composer 包名目前不会改变;不需要更改依赖关系。
Juliette 和贡献者们已经发布了 PHP_CodeSniffer 3.8.0,其中包含大量增强功能。
PHP_CodeSniffer 是社区项目并且需要资金支持。如果正在使用它,请考虑赞助维护者:opencollective.com/php_codesniffer。
- PhpStorm 2023.3 已发布
此重大更新带来了 AI 助手、完整 PHP 8.3 支持、Pest 支持、Symfony 改进以及其它功能。观看快速视频概述。 Xdebug 3.3.0 已发布
此版本新增对 PHP 8.3、火焰图和控制套接字的支持。对于火焰图可视化,可以使用 speedscope.app。
PHP 核心
大部分核心新闻都在 PHP 基金会的 PHP 核心摘要系列中有详细报道,因此这里只包含一些简要提及:
[RFC: #[NotSerializable]](https://wiki.php.net/rfc/not_serializable)
Max Semenik 提议新增#[NotSerializable]
注解以防止对类进行序列化。目前,要实现类似的行为,需要在__wake()
和__sleep()
中抛出异常。如果接受此 RFC,代码将更清晰,更适合静态分析器进行分析。#[NotSerializable]class MyClass { } serialize(new MyClass()); // Exception: Serialization of 'MyClass' is not allowed
RFC: 政策库
目前,有关 RFC 投票、发布流程、安全等级和命名准则的政策都存储在不同的地方。Derick Rethans 提议建立新的 Git 存储库,将所有政策集中到一个地方。
❌ RFC: final 匿名类
RFC 已驳回,一部分原因是投票问题不明确。
反馈后,Daniil Gentili 提出了新的 RFC:默认 final 匿名类。建议默认将所有匿名类设置为 final,并在需要时提供新的
open
关键字使其成为非 final。这类似于 Kotlin 的new open class{}
。该提案被接受的可能性似乎非常低。- ✅ RFC: 改变默认如何禁用 JIT
目前,当opcache.jit_buffer_size
设置为0
时,禁用 JIT。PHP 8.4 将为此设置单独的选项,默认值为:opcache.jit=disable
。 - PR: 不带括号的
new MyClass()->method()
Valentin Udaltsov 建议移除对象初始化表达式中不必要的括号,这在 X(以前称为“Twitter”)上引发了激烈的讨论。 2024 年将发布新的 PECL
PHP 基金会即将重新设计 PHP 中扩展的安装方式。目前,扩展是使用 pecl.php.net 旧网站和
pecl
工具分发的。目标是提供一个更易于用户和扩展维护者使用的现代化替代方案。
工具
- staabm/phpstan-todo-by——允许留下带有截止日期的“todo”注释。刚了解到,有些编程语言(如 Gleam)将
todo
作为语言特性提供。 - spatie/image v3——使用富有表现力的 API 操作图像。V3 不再依赖 league/glide。Freek Van der Herten 发布了 Spatie/image 和 Laravel 媒体库的新主要版本。
- bpolaszek/bentools-etl—— 遵循 SOLID 原则并且几乎无依赖的 ETL(提取/转换/加载)库。
- samdark/php-fpm_tuner——根据可用内存、CPU 核心以及 worker 进程消耗的内存来帮助调整 PHP-FPM 配置的脚本。
该工具的作者有一个很好的 Telegram 频道。在那里了解到 PHP 和其他脚本语言在 Alpine 上比在 Debian 上慢,因为musl
与glibc
内存管理差异。如果你想了解这一点,请看这里:为什么 Alpine Docker 镜像比 Ubuntu 镜像慢 50% 以上? - super-linter/super-linter——可以作为 GitHub Action 安装的 linter 的组合。如果有多语言项目,这可能很有用。
- gherkins/regexpbuilderphp——可读性强的正则表达式生成器。
- maximal/taran——用于对 web 应用程序进行负载测试的简单工具。
- serversideup/docker-php ——为 PHP 准备的生产可用的 Docker 镜像。
- OrbStack——Docker Desktop 的轻量级替代品。
- mnapoli/sqlite-s3——无服务器的开发数据库:由 S3 支持的 SQLite。
- typhoon-php/overloading——为 PHP 实现缺失的方法重载特性。
Symfony
- Baptiste Leduc 的使用 Symfony Scheduler 进行主任务调度。
- Javier Eguiluz 的 Symfony 7 认证简介。
- Ben Roberts 的在 Symfony 中提高内聚性——将 Twig 模板与代码一起存储。
- Fabien Potencier 的❗️最后的 Twig 2版本。
- yceruto/bundle-skeleton——推荐用于创建新 bundle 的最小 Symfony bundle。
- Symfony 2023 年度回顾。
Laravel
- Aaron Francis 的创建自定义 Laravel Pules 卡片。
- Benjamin Crozat 的 Laravel 新 Number 助手终极指南。
- Mater Oussama 的 Laravel 中的 PHP 注解。
- Muhammed Sari 动手实现 decoration。
- Steve McDougall 的 Laravel 中的 API版本控制:正确操作的完整指南。
- HPWebdeveloper/laravel-pay-pocket——具有全面的日志记录和支付功能的多钱包 Laravel 包。
- rmunate/PHP2JS——只需一个命令,就可以轻松与外部 JavaScript 文件共享 PHP Laravel 值。
- Jamison Valenta 的 Laravel 的缓存策略。
- Josip Crnković 的直接从客户端上传文件到 S3,而无需将文件放到 Laravel 应用程序中。
- Arunas Skirius 的如何在周末建立 SaaS。
- cloudstudio/ollama-laravel——Ollama-Laravel 是 Laravel 包,提供与 Ollama API 的无缝集成。Ollama 可以在本地运行 Llama 2 和其它大型语言模型。
- laravel-shift/blueprint——为 Laravel 开发人员提供的代码生成工具。
其它框架
- Wilmer Arambula 的服务定位与依赖注入。
- Wilmer Arambula 的垂直切片架构。
- Matt Mullenweg 的 WordPress 2023 回顾。
杂项
- Bosun Egberinde 的通过静态 PHP CLI 创建独立的 PHP 应用程序二进制文件——很高兴看到这个想法在社区中得到了越来越多的关注。
FrankenPHP 也允许使用上述相同的方法将 PHP 应用程序打包成单一的二进制文件。 - Kévin Dunglas 的订阅 HTTP 资源更新的新闻(Mercure、Braid、PREP…)。
- Alex Xu 的 [2023 年 API 协议的发展前景]()——对 API 的流行路径(approaches)进行了很好的概述:REST、Webhooks、GraphQL、SOAP、WebSocket、gRPC 等。
- Larry Garfield 的打破 static。
- Damien Seguy 的 Array、class 和匿名类的内存使用情况。
- Mark Scherer 的在 PHP 应用中使用小数。
- Christian Olear 的使用匿名类测试抽象类。
- Hamidreza Niazi 的日志记录层:结构化和持续日志记录教程。
- Damien Seguy 的 PHP 字典——本文档提供了 PHP 生态系统中常用的单词、概念、关键字和表达式的列表,并附有简短的定义和更多资源的额外链接。
- Twitter 上的“PHP 枚举真的让我着迷”
好玩
- Sylius elePHPant 可在 Kickstarter 上预订。
- Twitter 上的“const array array = array() 欢迎来到 #PHP 8.3!”
- Twitter 上的“这是#PHP 8.3 完全兼容的代码。无 @phpstan错误”
会议
这些 PHP 活动都值得参加(而且可以自由地向其中任何一个活动申请成为演讲者):
- Laracon EU——荷兰阿姆斯特丹,2024 年 2 月 5 日至 6 日。CFP
- PHP UK——英国伦敦,2024 年 2 月 15 日至 16 日。CFP
- 荷兰 PHP 会议——荷兰阿姆斯特丹,2024 年 3 月 12 日至 15 日。
- Laracon India——印度乌代浦,2024 年 3 月 23 日至 24 日。CFP
- [PHP[TEK] 2024](https://tek.phparch.com/)——美国伊利诺伊州芝加哥,2024 年 4 月 23 日至 25 日。CFP
- phpday 2024——意大利维罗纳,2024 年 5 月 16 日至 17 日。CFP
- 国际 PHP 会议——德国柏林,2024 年 5 月 27 日至 31 日。CFP
PHPers,节日快乐!
如果有任何有趣或有用的链接可以通过 PHP Annotated 分享,请在本文中发表评论或向我们发送推文。