
PHP バージョン履歴の歩き方 - PHP 5 から 8.5 までの変更点と追加機能を整理
PHP は1995年の誕生以来、「気軽なテンプレート言語」から「型と高速 JIT を備えたモダンな言語」へと大きく姿を変えてきました。世界の Web の多く(WordPress を含む)を支え続けながら、ここ10年ほどで別物と言ってよいほど進化しています。
この記事では、PHP のバージョン履歴を各版の変更点と追加機能とともに整理します。最新の PHP 8.5(2025年11月)と PHP 8.4 は php.net 公式の情報をもとに裏取りし、それ以前は確立した歴史としてまとめます。
まずサポート状況(2026年6月時点)
実務でいちばん大事なのは「どの版がまだサポートされているか」です。PHP は各メジャー/マイナー版にアクティブサポート約2年+セキュリティ修正約1年を与えます。
| バージョン | 初回リリース | アクティブ終了 | セキュリティ終了(EOL) |
|---|---|---|---|
| 8.5 | 2025-11-20 | 2027-12-31 | 2029-12-31 |
| 8.4 | 2024-11-21 | 2026-12-31 | 2028-12-31 |
| 8.3 | 2023-11-23 | 終了 | 2027-12-31 |
| 8.2 | 2022-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): ジェネレータ(
yield)、finally、パスワードハッシュ 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()
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 型
?T、void戻り値、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 合体代入??=、配列内スプレッド、数値リテラル区切り_
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)、名前付き引数 - アトリビュート
#[...](メタデータをコメントでなく言語機能で) - コンストラクタプロパティ昇格、
match式、Null 安全演算子?-> str_contains()/str_starts_with()/str_ends_with()、mixed型、文字列と数値の比較の健全化
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ならnullPHP 8.1(2021)
- 列挙型(enum)、readonly プロパティ、Fiber(軽量並行処理)
- 第一級callable構文
f(...)、純粋なインターセクション型、never戻り値、初期化子でのnew
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\XMLDocument(querySelector()やclassList対応) - BCMath のオブジェクト API(
BcMath\Number)、PDO のドライバ別サブクラス(Pdo\Sqlite等) - 遅延オブジェクト(lazy objects)、IR Framework ベースの新しい JIT
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]、定数を対象にできるアトリビュート、致命的エラーへのバックトレース付与
// パイプ演算子: 中間変数なしで連結
$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 型 / void | 7.1 |
型付きプロパティ / アロー関数 fn() | 7.4 |
JIT / Union 型 / アトリビュート / match / ?-> | 8.0 |
| enum / readonly プロパティ / Fiber | 8.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 を、古い印象のまま敬遠するのはもったいない——というのが、この履歴をたどって見えてくる結論です。