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
600
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
440
2023 State of DevOps Report」簡易ピックアップ
picopico
0
130
トーク力は一生役に立つよ
picopico
1
680
良いテストとは何か:持続可能で保守性の高いテストを書く
picopico
16
5.7k
伝え方で変わるLTの世界
picopico
3
1.4k
エラー処理関数を完全に理解する
picopico
0
160
一日30回リリースを可能にするpixiv開発
picopico
6
3.1k
Featured
See All Featured
Building an army of robots
kneath
306
46k
The Spectacular Lies of Maps
axbom
PRO
1
530
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
1
100
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
740
Amusing Abliteration
ianozsvald
0
100
The browser strikes back
jonoalderson
0
420
The Curious Case for Waylosing
cassininazir
0
240
Done Done
chrislema
186
16k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
58
50k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
140
Ethics towards AI in product and experience design
skipperchong
2
200
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にパッチを追加
アップデート頑張ろう!