PHP 7と8の違い | パフォーマンス向上は最大1.5倍

PHPバージョンの7 と 8 の違いについて、現在PHP7系を使っている方が8系にアップデートするメリットや注意点についての要点をまとめていきます。

PHP7と8の違い

大きなメリットとしては以下の点が挙げられるかと思います。

  • パフォーマンス向上
  • union型への対応
  • Null safeの導入
  • セキュリティサポート対象になる

一つ一つ解説していきます。

パフォーマンス向上

大きな目玉としてはパフォーマンス向上です。一部の処理で最大1.5倍のパフォーマンスの向上が行われました。

PHP 8ではJIT(Just-In-Time)コンパイラの導入により、一部のコードで大幅なパフォーマンス向上が見込まれています。

JIT(Just-In-Time)コンパイラは、プログラムの実行中にコードを動的にコンパイルする仕組みです。

通常、プログラムはソースコードからバイナリコードへの変換(コンパイル)が行われ、その後実行されます。

しかし、JITコンパイラは実行時に必要な部分のみをコンパイルし、実行しながら最適化することで、プログラムの実行速度を向上させることを目的としています。

必要な部分のみをコンパイルするように変わったため、大規模なアプリケーションであるほど速度の向上が見込めます。

実際にWordPressでベンチマークを計測した場合ですと、PHP7.2からPHP8.1では50%以上のリクエスト処理が可能になり、これは1.5倍の速度向上に相当します。

PHP 8.1は、PHP 8.0よりも47.10%高速な、圧倒的勝者です。他の結果がどれも僅差であることを考えると、この違いは目立ちます。また、PHP 7.2と比較すると、1秒あたり50%以上多くのリクエスト(またはトランザクション)を処理します。

https://kinsta.com/jp/blog/php-benchmarks/#h-6

union型への対応

PHP 7系でも関数の入力値や返却値に型の指定を記述できました。ですが、この型の指定は1種類しか指定できませんでしたが、union型として | を記述することで複数の型が指定する事ができるようになります。

// 7系まで
function calculateTax(float $amount): float {
    $taxRate = 0.08;
    return $amount * $taxRate;
}

// 8系から
function calculateTax(int|float $amount): int|float {
    $taxRate = 0.08;
    return $amount * $taxRate;
}

Null safeの導入

Null safe(null安全) は、PHP 8で導入された新しい演算子の1つです。

これは、変数がNullである可能性がある場合に、安全にプロパティやメソッドにアクセスするための仕組みを提供します。

具体的な使用例がこちらです

// 今までの取得方法
if ($user !== null) {
    $username = $user->getUsername();
}

// Null safe
$username = $user?->getUsername();

オブジェクトのnullチェックが不要になり、シンプルな記述にする事ができます。

セキュリティサポート対象になる

現段階で(2023年8月22日) PHP 7のサポート期限は2022年12月3日に終了しています。

PHP 8系にすることでセキュリティサポート対象になります。

PHP 7系の最新である 7.4までのバージョンはセキュリティアップデートやバグ修正は提供されていません。新しい機能やセキュリティ対策を受けるためには、PHP 7からPHP 8への移行を検討することが推奨されます。

PHPアプリケーションで保守している大切な自社データを守るためにはPHP 8へアップデートする必要があります。

終わりに

以上がPHPの7と8の違いをまとめてご紹介しました。

この他にも使用可能になった組み込み関数の追加や、柔軟なクラス設計が可能になったり等、変更点は他にもあるのですが、気になる方は公式のドキュメントを確認してください。

https://www.php.net/manual/ja/migration80.php

大きなトピックとしてはパフォーマンスの向上です。実行速度の向上に直結して運用費の削減やユーザー体験の向上が期待できるので、アップグレードする事をオススメします。

投稿者


Comments

コメントを残す

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

CAPTCHA