Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PHP 8.4がリリース! あなたはもうアップデートしましたか?
Search
picopico
March 26, 2025
0
200
PHP 8.4がリリース! あなたはもうアップデートしましたか?
PHPerKaigi 2025にて発表
https://fortee.jp/phperkaigi-2025/proposal/2272e963-b6b4-4707-88fe-2bef1a9f9e7f
picopico
March 26, 2025
Tweet
Share
More Decks by picopico
See All by picopico
PHPとFluentdで実現するリアルタイムログ分析
picopico
2
340
2023 State of DevOps Report」簡易ピックアップ
picopico
0
110
トーク力は一生役に立つよ
picopico
1
620
良いテストとは何か:持続可能で保守性の高いテストを書く
picopico
16
5.5k
伝え方で変わるLTの世界
picopico
3
1.3k
エラー処理関数を完全に理解する
picopico
0
130
一日30回リリースを可能にするpixiv開発
picopico
6
2.9k
Featured
See All Featured
Being A Developer After 40
akosma
91
590k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
52
2.8k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.5k
Balancing Empowerment & Direction
lara
1
91
Testing 201, or: Great Expectations
jmmastey
42
7.5k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
1
84
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.3k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
21k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Transcript
PHP 8.4がリリース! あなたはもうアップデートしましたか? pixiv Inc. 当田 昇(@picopico_dev) 2024.03.09
2 会社 ピクシブ株式会社 経歴 2023年4⽉ 新卒⼊社 職種 pixiv事業本部ウェブエンジニアリング部 兼 インフラ部SREチーム
当⽥ 昇 @picopico_dev
PHPのアップデート、してますか?
https://www.php.net/supported-versions.php
PHP8.0は既にEnd of life PHP8.1~8.2もSecurity fixes only
ところで・・・
2024/11/21にPHP8.4がリリースされました🎉
とはいえ、まだアップデートしていない人も多いはず ・・・
目次 1. PHPアップデートの全貌 2. PHP8.4移行の試練
目次 1. PHPアップデートの全貌 2. PHP8.4移行の試練
PHPアップデートの全貌 1. PHP8.4環境の作成
PHPアップデートの全貌 1. PHP8.4環境の作成 2. 自動化テストのパス
PHPアップデートの全貌 1. PHP8.4環境の作成 2. 自動化テストのパス 3. E2Eテスト or 主要な機能の動作確認
PHPアップデートの全貌 1. PHP8.4環境の作成 2. 自動化テストのパス 3. E2Eテスト or 主要な機能の動作確認 4.
段階的リリース
PHPアップデートの全貌 1. PHP8.4環境の作成 2. 自動化テストのパス 3. E2Eテスト or 主要な機能の動作確認 4.
段階的リリース 5. 100%リリース
目次 1. PHPアップデートの全貌 2. PHP8.3→8.4移行の試練
https://www.php.net/manual/ja/migration84.php
https://www.php.net/manual/ja/migration84.php
• exit() の動作の変更 • 比較中の再帰 • readonly プロパティの間接的な変更 • 定数の型の変更
• 一時ファイル名の長さ • E_STRICT エラーレベルの削除 • 型が追加された拡張クラスの定数 • リソースからオブジェクトへの移行 • 暗黙的な nullable パラメータ • trigger_error() で E_USER_ERROR を使用 • CURLOPT_BINARYTRANSFER 定数は非推奨 • …
3つピックアップ!
その1: PECL拡張が対応してない そもそもPECL拡張が8.4に対応してない。 PRを送る or GitHubの最新対応版を自前でビルドして使う
その2: exitの関数化 何故かPHP8.4でテストを実行すると、テストが落ちても正常終了する問題
その2: exitの関数化 何故かPHP8.4でテストを実行すると、テストが落ちても正常終了する問題
その2: exitの関数化 CIでregister_shutdown_function()内でexit()を呼び出すコードがあった。 PHP8.4以前は終了コードが引き継がれていたが、PHP8.4以後はパラメータが無い時 にデフォルト値0が適用される。 よって、テストが落ちているのに何故か正常終了してしまっていた。
register_shutdown_function(function () { if (...) { exit(); // 終了コードが0になる破壊的変更 }
}
その3: 暗黙的なnullable型の非推奨 デフォルト値null(=nullable)で型にnullが無い場合を非推奨に function foo(string $param = null) {}
Rectorで一掃する https://getrector.com/rule-detail/explicit-nullable-param-type-rector
ライブラリ側でエラーが発生したら? (以下は対症療法です。 出来ればPR送ってライブラリ側で修正するかフォークして下さい)
cweagans/composer-patchesでパッチを当てる https://docs.cweagans.net/composer-patches/
cweagans/composer-patchesでパッチを当てる 1. vendor/配下をgitに追加 2. vendor/配下にRectorを適用 3. git diff – vendor/hoge
> patches/hoge-php84.patch 4. composer.jsonにパッチを追加
アップデート頑張ろう!