PHP バージョン履歴の歩き方 - PHP 5 から 8.5 までの変更点と追加機能を整理

PHP バージョン履歴の歩き方 - PHP 5 から 8.5 までの変更点と追加機能を整理

作成日:
更新日:

PHP は1995年の誕生以来、「気軽なテンプレート言語」から「型と高速 JIT を備えたモダンな言語」へと大きく姿を変えてきました。世界の Web の多く(WordPress を含む)を支え続けながら、ここ10年ほどで別物と言ってよいほど進化しています。

この記事では、PHP のバージョン履歴を各版の変更点と追加機能とともに整理します。最新の PHP 8.5(2025年11月)PHP 8.4php.net 公式の情報をもとに裏取りし、それ以前は確立した歴史としてまとめます。

まずサポート状況(2026年6月時点)

実務でいちばん大事なのは「どの版がまだサポートされているか」です。PHP は各メジャー/マイナー版にアクティブサポート約2年+セキュリティ修正約1年を与えます。

バージョン初回リリースアクティブ終了セキュリティ終了(EOL)
8.52025-11-202027-12-312029-12-31
8.42024-11-212026-12-312028-12-31
8.32023-11-23終了2027-12-31
8.22022-12-08終了2026-12-31
8.1 以前-終了EOL(サポート切れ)

WARNING

PHP 8.1 以前はすでに EOL(サポート終了)です。セキュリティ修正が出ないため、本番運用しているなら最優先で 8.3 以降(できれば 8.4 / 8.5)へ上げてください。とくに古い PHP 7 系・5 系を動かしている環境は、脆弱性が放置される状態です。

PHP 5 系: オブジェクト指向と言語機能の整備(2004〜)

PHP 5.0(2004年)は Zend Engine 2 を載せ、本格的なオブジェクト指向を導入した転換点でした。可視性(public/private/protected)、抽象クラス、インターフェース、例外などがここで整います。その後のマイナー版で、現代でも使う土台が揃いました。

  • 5.3(2009): 名前空間クロージャ(無名関数)、遅延静的束縛(late static binding)、__callStatic、NOWDOC
  • 5.4(2012): トレイト(trait)短い配列構文 []、ビルトイン Web サーバー、クロージャ内の $this
  • 5.5(2013): ジェネレータ(yieldfinallyパスワードハッシュ API(password_hash()、OPcache の同梱
  • 5.6(2014): 可変長引数(...)と引数アンパック、定数式、べき乗演算子 **use function / use const

NOTE

「PHP 6」は欠番です。Unicode 対応を目指した PHP 6 の開発は難航し、結局リリースされませんでした。その成果の一部は 5.x に取り込まれ、次のメジャーは一気に PHP 7 へ飛びます。

PHP 7 系: パフォーマンス革命と型の導入(2015〜)

PHP 7.0(2015年)は Zend Engine 3 により性能が約2倍に跳ね、同時にを本格的に導入しました。「遅い言語」というイメージを覆した、もっとも重要なメジャーの一つです。

PHP 7.0(2015)

  • スカラー型宣言int / float / string / bool)と戻り値の型宣言
  • Null 合体演算子 ??宇宙船演算子 <=>(比較)
  • 無名クラス、Throwable / Error(致命的エラーを例外として捕捉)、intdiv()
PHP 7.0: 型と新演算子
function sum(int $a, int $b): int {
    return $a + $b;
}
 
$name = $_GET['name'] ?? 'guest'; // null合体
usort($list, fn($a, $b) => $a->age <=> $b->age); // 宇宙船

PHP 7.1〜7.4

  • 7.1(2016): Nullable 型 ?Tvoid 戻り値、iterable 型、クラス定数の可視性、複数例外の multi-catch
  • 7.2(2017): object 型、Sodium(libsodium)をコアに、Argon2 パスワードハッシュ
  • 7.3(2018): 柔軟なヒアドキュメント、関数呼び出しの末尾カンマ、array_key_first() / array_key_last()JSON_THROW_ON_ERROR
  • 7.4(2019): 型付きプロパティアロー関数 fn()、FFI、プリロード、Null 合体代入 ??=、配列内スプレッド、数値リテラル区切り _
PHP 7.4: 型付きプロパティとアロー関数
class User {
    public int $id;
    public string $name;
}
 
$names = array_map(fn($u) => $u->name, $users);
$config['timeout'] ??= 30; // 未設定なら代入

PHP 8 系: モダン化(2020〜)

PHP 8 は、JIT コンパイラと一連の言語機能で、PHP を「モダンな静的型寄りの言語」へ押し上げました。ここからは各版を少し詳しく見ます。

PHP 8.0(2020)

  • JIT コンパイラUnion 型int|string)、名前付き引数
  • アトリビュート #[...](メタデータをコメントでなく言語機能で)
  • コンストラクタプロパティ昇格matchNull 安全演算子 ?->
  • str_contains() / str_starts_with() / str_ends_with()mixed 型、文字列と数値の比較の健全化
PHP 8.0: 昇格・match・nullsafe
class Point {
    public function __construct(
        public readonly int $x = 0,
        public readonly int $y = 0,
    ) {}
}
 
$label = match($status) {
    200, 201 => 'OK',
    404 => 'Not Found',
    default => 'Unknown',
};
 
$country = $user?->address?->country; // どこかがnullならnull

PHP 8.1(2021)

  • 列挙型(enum)readonly プロパティFiber(軽量並行処理)
  • 第一級callable構文 f(...)、純粋なインターセクション型、never 戻り値、初期化子での new
PHP 8.1: enum と readonly
enum Status: string {
    case Active = 'active';
    case Banned = 'banned';
}
 
class Order {
    public function __construct(
        public readonly string $id,
    ) {}
}

PHP 8.2(2022)

  • readonly クラス、DNF 型(選言標準形)、null / false / true を単独の型として
  • トレイト内の定数、動的プロパティの非推奨化#[\AllowDynamicProperties] で明示)、新しい Random 拡張

PHP 8.3(2023)

  • 型付きクラス定数、動的なクラス定数フェッチ、#[\Override] アトリビュート
  • json_validate()(巨大 JSON を安価に検証)、Randomizer の追加メソッド、DateTime 例外の細分化

PHP 8.4(2024)

ここから php.net 公式の機能リストに基づきます。8.4 はプロパティの扱いを大きく変えた版です。

  • プロパティフック(property hooks): get / set をプロパティに直接書け、定型的なゲッター/セッターを削減
  • 非対称可視性(asymmetric visibility): public private(set) のように読みと書きで可視性を分けられる
  • new MyClass()->method(): new 式を括弧で囲まずにメソッド/プロパティへアクセス可能に
  • #[\Deprecated] アトリビュート: 自作の関数・メソッド・定数に非推奨マークを付けられる
  • array_find() / array_find_key() / array_any() / array_all(): 関数型の配列操作
  • HTML5 対応の DOM API: Dom\HTMLDocument / Dom\XMLDocumentquerySelector()classList 対応)
  • BCMath のオブジェクト API(BcMath\Number、PDO のドライバ別サブクラス(Pdo\Sqlite 等)
  • 遅延オブジェクト(lazy objects)IR Framework ベースの新しい JIT
PHP 8.4: プロパティフックと非対称可視性
class User {
    // 読みは public、書きは private
    public private(set) string $name;
 
    // プロパティフック(ゲッター/セッターを書かずに済む)
    public string $fullName {
        get => $this->first . ' ' . $this->last;
    }
}

PHP 8.5(2025)

最新の安定版が PHP 8.5(2025年11月20日)です。公式発表の目玉はこちらです。

  • パイプ演算子 |>: 値を左から右へ、複数の callable に順に通せる。中間変数なしで処理を連結できる
  • clone with: clone($obj, [...]) 構文でクローンしつつプロパティを更新。readonly クラスでの「with-er」パターンが簡単に
  • URI 拡張: RFC 3986 と WHATWG URL に準拠した組み込みの URL 解析・正規化(uriparser / Lexbor ベース)
  • #[\NoDiscard] アトリビュート: 戻り値が使われていないときに警告。API の安全性を上げる
  • 定数式での静的クロージャ・第一級callable(アトリビュート引数などで使える)
  • 永続的な cURL share ハンドルcurl_share_init_persistent())でリクエスト跨ぎの接続コストを削減
  • array_first() / array_last()(7.3 の array_key_first/last を補完)、get_error_handler() / get_exception_handler()
  • プロパティへの #[\Override]、定数を対象にできるアトリビュート、致命的エラーへのバックトレース付与
PHP 8.5: パイプ演算子と clone with
// パイプ演算子: 中間変数なしで連結
$slug = $title
    |> trim(...)
    |> (fn($s) => str_replace(' ', '-', $s))
    |> strtolower(...);
 
// clone with: readonly でも with-er パターンが簡単
final class Money {
    public function __construct(
        public readonly int $amount,
        public readonly string $currency,
    ) {}
    public function withAmount(int $amount): static {
        return clone($this, ['amount' => $amount]);
    }
}

主要機能の登場バージョン早見表

「この機能、いつから使える?」を引けるようにまとめます。

機能登場版
名前空間 / クロージャ5.3
トレイト / 短い配列構文 []5.4
ジェネレータ / password_hash()5.5
スカラー型 / 戻り値型 / ?? / <=>7.0
Nullable 型 / void7.1
型付きプロパティ / アロー関数 fn()7.4
JIT / Union 型 / アトリビュート / match / ?->8.0
enum / readonly プロパティ / Fiber8.1
readonly クラス8.2
型付きクラス定数 / #[\Override] / json_validate()8.3
プロパティフック / 非対称可視性 / array_find()8.4
パイプ演算子 `>` / clone with / URI 拡張

移行・選定の指針

  • 新規なら 8.4 か 8.5。8.5 は最新で2029年末までセキュリティ対象。長く使うなら 8.4 / 8.5 のどちらでも安心
  • EOL 版(8.1 以前)は最優先で脱出。まず 8.3 へ上げ、そこから 8.4 / 8.5 へ
  • メジャー/マイナーを跨ぐときは公式の移行ガイド(migrationXX ページ)の非推奨・破壊的変更を必ず確認。動的プロパティ(8.2 で非推奨)など、地味だが効く変更がある
  • パフォーマンスは 7.0 で一段、8.0 の JIT、8.4 の新 JIT と継続的に向上。古い版からの移行は速度面でも素直に効く

まとめ

  • PHP は 5 系で OOP を整え、7 系で性能と型、8 系でモダン化(JIT・enum・property hooks)と進化してきた
  • 最新は PHP 8.5(2025-11-20)。パイプ演算子 |>・clone with・URI 拡張・#[\NoDiscard] などが目玉
  • 8.4 はプロパティフック・非対称可視性・HTML5 DOM API・新 JIT が大きい
  • サポートはアクティブ約2年+セキュリティ約1年。8.1 以前は EOLなので早急に更新を
  • 「いつから使える?」は早見表で逆引きできる。移行時は公式の migration ページで非推奨・破壊的変更を確認

10年前の PHP と今の PHP は、もはや別の言語と言ってよいほどです。型・enum・JIT・property hooks まで揃った現在の PHP を、古い印象のまま敬遠するのはもったいない——というのが、この履歴をたどって見えてくる結論です。

参考リンク