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
52
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
310
2023 State of DevOps Report」簡易ピックアップ
picopico
0
110
トーク力は一生役に立つよ
picopico
1
610
良いテストとは何か:持続可能で保守性の高いテストを書く
picopico
16
5.4k
伝え方で変わるLTの世界
picopico
3
1.3k
エラー処理関数を完全に理解する
picopico
0
130
一日30回リリースを可能にするpixiv開発
picopico
6
2.8k
Featured
See All Featured
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.2k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
28
2k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.1k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
GraphQLの誤解/rethinking-graphql
sonatard
70
10k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Fireside Chat
paigeccino
37
3.3k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
120k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7.1k
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にパッチを追加
アップデート頑張ろう!