緊急PHP2Shell(CVE-2026-109618 / 109619)公表から1日/PHP 8.1 以前は修正版なし今すぐ診断
  1. ホーム
  2. ブログ
  3. バージョン別の対策

PHP 7 と PHP 8 の違い|移行で困ることと、良くなること

公開
著者
編集部

PHP 7 と PHP 8 は何が違うのか。移行で動かなくなること、新しく使えるようになったこと、保守の期限の違いをまとめた。

PHP 7 から PHP 8 へは、大きく変わった。PHP2Shell の修正版が出ているのは 8.2 以降なので、7 系のサイトは 8 系への移行が必要になる。何が違うのかをまとめた。

この記事の要点
  • PHP 7 系はすべて保守が終わっていて、PHP2Shell の修正版もない
  • 8.0 で、削除された関数や比較のルールの変更があり、古いプログラムが止まりやすい
  • 8 系では、JIT・名前付き引数・match 式など新しい書き方が増えた
  • 移るなら 8.4(2028年12月31日まで)か 8.5(2029年12月31日まで)

保守の違い

系列状態
PHP 7.0〜7.4保守終了(7.4 は 2022年11月28日に終了)
PHP 8.0・8.1保守終了
PHP 8.2〜8.5保守中(8.2 は 2026年12月31日まで)

移行で困ること(7.4 → 8.0)

  • create_function()・each()・money_format()・get_magic_quotes_gpc() などが削除
  • 0 == "foo" が false に(数値と文字列の比較の仕方が変わった)
  • 未定義の定数が、警告ではなくエラーに
  • クラス名と同じ名前のメソッドが、コンストラクタとして扱われない
  • 非 static メソッドを Class::method() の形で呼ぶとエラー
  • implode() の逆順の引数が使えない
  • __autoload() が削除(spl_autoload_register() を使う)
  • PDO の既定のエラーモードが「例外を投げる」に
  • 既定の error_reporting が E_ALL になり、隠れていた警告が出る

8 系で良くなったこと

機能版内容
JIT8.0処理を速くする仕組み(使うには設定が必要)
名前付き引数8.0引数を名前で渡せる
match 式8.0switch より安全に書ける
nullsafe 演算子8.0?-> で null のときに止まらず進める
enum8.1決まった値の一覧を型として書ける
readonly プロパティ8.1一度入れたら変えられない値

8 系の中でも気をつけること

  • 内部関数に null を渡すと非推奨の警告(strlen(null) など)
  • htmlspecialchars() などの既定が ENT_QUOTES | ENT_SUBSTITUTE に
  • MySQLi が既定でエラー時に例外を投げる
  • E_STRICT の定数が非推奨
  • DBA・ODBC・SOAP の一部で is_resource() の判定が効かない

よくある質問

PHP 7.4 から 8 系に上げると、どこが動かなくなりますか?

削除された関数(create_function・each など)、数値と文字列の比較の変更、未定義の定数がエラーになることなどが代表的です。
PHP 8 移行チェックで、プログラムを貼って確かめられます。

PHP 8 にすると速くなりますか?

多くの場合、速くなります。
ただし速さより、保守が続く版に移ることのほうが大切です。

無料ツールPHP2Shell 脆弱性チェッカーPHP のバージョンとサーバー会社を選ぶだけで、危険度と今やることが分かります。

参考にした情報

この記事の情報

2026年10月22日時点の公開情報にもとづく。最新は各公式のページを確認すること。

URL を入れるだけで、PHP2Shell の危険度と今やることが分かる。移行の相談もできる。

無料で診断する

この記事の著者

編集部