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
260
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
360
2023 State of DevOps Report」簡易ピックアップ
picopico
0
120
トーク力は一生役に立つよ
picopico
1
630
良いテストとは何か:持続可能で保守性の高いテストを書く
picopico
16
5.5k
伝え方で変わるLTの世界
picopico
3
1.3k
エラー処理関数を完全に理解する
picopico
0
130
一日30回リリースを可能にするpixiv開発
picopico
6
2.9k
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
134
9.4k
Docker and Python
trallard
44
3.5k
How STYLIGHT went responsive
nonsquared
100
5.6k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
281
13k
Faster Mobile Websites
deanohume
307
31k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
Why Our Code Smells
bkeepers
PRO
336
57k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.6k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
Designing Experiences People Love
moore
142
24k
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にパッチを追加
アップデート頑張ろう!