歡迎來到 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 分享,請在本文中發表評論或向我們發送推文。