メシのタネ

メシのタネになる、Laravelや設計思想の技術配信サイト


PHP9の破壊的変更まとめ ── updateで困らない先回りガイド


  1. Webプログラム
  2. PHP
  3. PHP9の破壊的変更まとめ ── updateで困らない先回りガイド

そもそも PHP 9 って存在してる?

まだ影も形もありません。けど GitHub には “PHP 9” って名前の箱 (Milestone) があって、そこに 「8.x では入れにくい破壊的変更」 がポイポイ投げ込まれています。

来たときに慌てる vs. 今のうちに慌てとく ── 後者派として、この記事では「未来箱に何が詰まってるか」を一気に棚卸しします。

キーワード: RFC / strict typing / BC break / WordPress 勢の運命

マイルストーンの中を覗いてみた結果

観測ポイント2025‑06‑04 時点の様子
GitHub Milestonephp/php-src • PHP 9 — 6 open / 0 closed Issues、due‑date なし (要するに未定)
主要タグengine, fatal-errors, strict-typing
話し合いの場internals ML と GitHub RFC PR

👀 方針ざっくり

  • 8.x は互換性キープしつつ新機能追加
  • “壊す系” は全部 9 箱へストック

破壊的 RFC ざっくり5選(+ミニコード)

Undefined Variable Error Promotion 🛑 採択済み

echo $foo; // PHP 8.x  Warning
           // PHP 9    Error (例外)

超初歩的だけど稼働済みのときの謎エラーたまにこれ。

Autovivification on false 廃止 🛑 採択済み

$flag = false;
$flag['key'] = 1; // 9.0  Fatal error

false に配列アクセスする人、マジでいたりする🤮

Modern Compression 🚧 議論中

zstd, brotli を標準関数で握れるようにしようぜ、という夢。

True Async 🚧 議論中

async function fetch() {
    $data = await http_get($url);
}

全 PHPer が欲しいけど採用票はまだ割れてる

暗黙キャスト縮小 💭 アイデア段階

文字列⇔数値の自動変換をさらに絞る案。「'10abc' == 10 やめません?」って話。

RFC は採択後に「やっぱ 8.7 で出すわ」って動くこともザラ。最新は GitHub ウォッチ推奨。

いつ GA するの? — 歴史と期待値

メジャーGA次の GA までざっくり周期
PHP 7.02015‑125 年7 → 8
PHP 8.02020‑116?←イマココ

2026〜27 年 が最短シナリオ。でも 8.x で吸収できる RFC が多いからズレ込むかも、が現場の勘。

もっと厳密な PHPはホントに来る?

結論だけ先に全面 strict デフォルトは五分五分。でもピンポイント厳格化は確定で進む。

イベント影響度コメント
2015Scalar Type Hints v5 可決🟡ファイル単位 strict/weak 折衷案で実装
2021‑24Warning 昇格まつり🟡未定義アクセスが次々と警告化
2025UndefinedVariable → Error🔴9.0 で Fatal 予定(採択済み)

strict_types=1 を全ファイルに貼れる体制 が組めてれば、9.0 の山は7合目クリアと言える。

やっておけばPHP9と即友達チェックリスト

  1. phpstan / psalm レベル MAX
  2. error_reporting(E_ALL) を CI に入れて Warning=CI FAIL
  3. declare(strict_types=1); 全面採用
  4. Throwable 捕捉 — シリアライズ等で Warning に頼らない
  5. 依存ライブラリの 8.5 対応状況をウォッチ
たねまる

CI赤にしないように頑張ろうねぇ〜

WordPress がPHP9に対応できる可能性を予想

WP ver対応 PHP状態
6.38.0 / 8.1🟢 完全対応
6.48.3🟡 β対応
6.78.4🟡 β対応
  • コアは案外タフ
  • nightly でテスト回してるし、polyfill 大好きだから PHP9.0 でも多分生きる。頑張れ20年選手。

問題はプラグイン地獄

  • レガシー作者が strict 対応放棄 → White Screen of Death 量産
  • 共有レンタルサーバーが PHP 7.x を引き上げた瞬間 “なんちゃって PHPer” は淘汰

LTS とビジネス影響を秒速でイメージ

  • IaaS/PaaS — 9.0 GA しても 8.x LTS が 1 年は残る。エンプラ案件は慌てなくて良し。
  • Laravel/Nest — GA + 6 か月で “9.x 対応” ブランチ切るのが最近の癖。
  • 新人教育 — 厳密型がデフォになると 👉 「最初から安全な PHP」 で onboarding がラク。

まとめ 〜 PHP 9 は“警告ゼロ戦士”への昇格試験だ!

  • PHP 9 そのものは霧だけど RFC は既にコードを書き換え始めている
  • Warning をゼロ静的解析 MAX にしておく → 9.0 アップグレードが “バージョン番号の差し替え” で終わる。
  • GitHub Milestone ★Star、internals ML ★Watch で「未来箱」をリアルタイム監視。

要するに “慌てるな。今慌てとけ。” です 🫡

参考リンク

FAQ

RFC って何?

Request For Comments” の略。PHP コア開発者が「こういう機能どうスか?」と投げる企画書。ML で議論→投票(2/3 ルール)→可決なら実装、という流れ。つまり 仕様の Pull Request

GA って何?

General Availability”=正式リリース。βとか RC とかの肩書きが取れて「本番で使ってヨシ!」状態。

LTS って何?

Long Term Support”。バグ/セキュリティ Fix だけ数年続ける安定ブランチ。Ubuntu でおなじみ。

nightly でテスト& polyfill 大好き → 何が安全?

nightly = 開発版 PHP を毎晩ビルド→CI。そこで落ちたら「明日の本番で死ぬバグ」を前日に潰せる。
polyfill = 新 API を旧バージョンでも真似る関数。=「最新版でも古い版でも動く」保証が取れる。WordPress コアが意外とタフなのはコレ。

zstd / brotli って何?

Google 謹製の Brotli、Facebook 発の Zstandard。gzip より圧縮率↑&展開速い。標準じゃないと PECL 拡張頼り+環境差異地獄 が発生する。

false が入った変数に配列アクセスって何でやるの?

$row = db_fetch(); が失敗して false → なのに ['col'] を書いちゃう事故。昔は Warning で流れてたから潜伏バグになってた。

PHP9 が型厳密って言っても TypeScript ほどじゃないよね?

Yes。PHP はランタイム型チェック主体。TS はコンパイル時+構造的型。Generics もまだ RFC 段階。なので “よりマシ” になるだけで TS レベルの保証までは行かない

PHP で async すると何が嬉しい?

I/O 待ち(HTTP, DB, Redis…)を await でノンブロック化 → 同一プロセスで並行タスクが回せる。FaaS やチャットボットで レスポンス短縮 / スループット向上 が見込める。


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.