新しい PHP 8 の変更が WordPress Web サイトのパフォーマンスに与える影響
公開: 2023-05-04今日最高のプログラミング言語の 1 つとして、PHP は Web 開発とコーディングをより柔軟にする新しい方法を提供します。 PHP 8.0 と PHP 8.1 の導入により、PHP は、より優れた構文、セキュリティなどを提供する新機能をテーブルにもたらすことを目指しています。
PHP 8.0 の新機能とそのすべての特殊機能について詳しくは、以下をお読みください。 過去のバージョンからのすべての主要な更新と改善、およびそれらが WordPress サイトにどのように影響するかを発見してください。
PHP 8.0 アップデートについて
PHP 8.0 アップデートは、世界中の開発者と Web サイトに大きな変更をもたらします。 2020 年にリリースされ、革新的なコメント要求 (RFC) やその他の機能により、パフォーマンス、構文、型の安全性、エラー処理が一般的に向上する新機能と改善が約束されました。
パフォーマンスの違いは PHP 5 と PHP 7 ほど顕著ではありませんが、PHP 8.0 はリリースごとに着実に改善されています。 さらに、PHP 7 から PHP 7.4 までのほとんどの変更は非推奨です。
PHP 8.0 と PHP 8.1 の両方で、開発者がより迅速かつ柔軟にコーディングできるようにするための新しい関数が導入されています。 以下は、開発者が検討すべき最も注目すべき製品の一部です。
ジャストインタイムのコンパイル
ジャストインタイムまたは JIT コンパイラーは、最新の PHP バージョンの最高の新機能の 1 つです。 この RFC を使用すると、開発者はコンパイルをバイパスして、パフォーマンスとメモリの使用を大幅に改善できます。
PHP は、この RFC を Opcache のほぼ独立した部分として実装します。 JIT を有効にすると、開発者は Zend VM などのサードパーティ プログラムの代わりに CPU を介してコードを実行できるため、計算速度が向上します。
より優れた数値コーディング ソリューションとは別に、JIT は「典型的な」PHP Web アプリケーション コードのパフォーマンスを向上させる可能性もあります。 さらに、JIT によって PHP が高速化されるため、より多くのコードを C から PHP に移行できる可能性があります。
さらに、PHP 8.0 では、トレースと 1.5 という 2 つの JIT コンパイラーが導入されています。 2 つのうち、トレース JIT は、合成ベンチマークで約 3 倍のパフォーマンスを示すことで、最も有望です。 一方、1.5 では、実行時間の長いアプリケーションで 2 倍の改善が見られます。
名前付き引数
最新の PHP バージョンでは、既存の位置パラメーターを拡張する名前付き引数が提供されています。 現在、開発者は、位置ではなくパラメーター名に基づいて入力データを関数に渡すことができます。 このため、名前付き引数は開発者にさまざまな利点を提供します。
1 つには、引数の意味が自己文書化されるため、より理解しやすいコードを作成できるようになります。 また、順序に依存しないため、開発者は関数シグネチャと同じ方法で引数を関数に渡す必要がありません。
さらに、開発者は引数を位置引数と組み合わせることができます。 さらに、変更したい引数を指定することもできます。 そうすれば、デフォルト値を上書きしたくない場合に引数を調整する必要がなくなります。
名前付き引数は、クラスまたは型の宣言でも便利です。
ユニオン型 2.0
PHP の以前のバージョンでは、開発者はドキュメント アノテーションで共用体型しか指定できませんでした。 PHP は、「?Type 構文」と「iterable」クラスを除いてサポートを提供しませんでした。
PHP 8.0 は、共用体型 2.0 RFC を通じて、関数シグネチャで共用体型をサポートすることを目指しています。 この更新により、開発者はインライン ドキュメントに依存しなくなります。
さらに、PHP でユニオン型をサポートすることで、開発者はさまざまなクラスの情報を phpdoc から関数シグネチャに移動できます。 そのため、ミスの早期発見、型情報の陳腐化防止、継承時の型チェックなど、さまざまなメリットがあります。
ヌルセーフ演算子
以前は、開発者はメソッド呼び出しで null 合体演算子を使用できませんでした。 サードパーティのフレームワークからの中間チェックまたはオプションのヘルパーが必要になります。 ただし、新しい nullsafe 演算子を使用すると、開発者はメソッドにそのような関数を含めることができます。 これは、開発者が null チェック条件の代わりに一連の呼び出しを使用できるようになったことを意味します。 チェーン内の 1 つの要素の評価が失敗すると、実行チェーン全体が停止し、チェーン全体が「null」と評価されます。
属性 V2
他の言語ではアノテーションとして一般的に知られている属性は、開発者がオブジェクト、要素、またはファイルのプロパティを指定するために使用できる構造化されたメタデータです。 開発者は、この機能を使用して、doblock を解析せずにすべてのクラス名にメタデータを追加することもできます。
PHP 7.4 までは、メタデータをクラスの宣言に追加する唯一の方法は、ドキュメント コメントを使用することでした。 新しい Attributes V2 RFC では、PHP は属性を、開発者が型、関数、プロパティ、メソッド、パラメーター、および定数の宣言に追加するために使用できる構造化された構文メタデータとして定義します。
現在、開発者は docblock コメントの前後に属性を追加し、1 つまたは複数の関連付けられた値を持つ 1 つまたは複数の属性を持つことができます。
一致式 V2
「switch 式」に精通している人は、すでに match 式が何であるかを知っています。 マッチ式だけが「スイッチ」のより良いバージョンです。
たとえば、より安全なセマンティクスを提供するため、開発者は値を 1 回だけ返すことができます。 また、値を「壊す」ことなく条件を組み合わせることができます。 さらに、型強制は行わず、厳密な型比較を使用します。
コンストラクタ プロパティの昇格
この RFC では、コンストラクターとパラメーター定義をマージすることを目的とした、プロパティ宣言を簡素化するためのより簡潔な構文が導入されています。 現在、開発者は、冗長性を減らして短くすることで、プロパティまたはパラメーターを宣言するより良い方法を使用できます。 この RFC により、開発者は、値オブジェクト用に記述するボイラープレート コードを減らすこともできます。
より健全な文字列と数値の比較
PHP 8.0 は、この RFC を提供して、数値文字列の比較をより合理的にします。 以前は、このようなタスクを実行するために、PHP は最初に文字列を数値にキャストし、次に整数または浮動小数の比較を実行していました。 このプラクティスはさまざまな点で役立ちましたが、サイトの機能とセキュリティに影響する致命的なエラーが発生する可能性がありました。
前述のように、この RFC は文字列と数値の比較により合理的な動作を提供することを目的としています。 数値文字列と比較するときに数値比較を使用するか、数値を文字列に変換して文字列比較を使用します。
内部関数の一貫した型エラー
不正な型パラメーターを渡すと、内部関数とユーザー定義関数の動作が異なります。 内部関数は、ユーザー定義関数のように「TypeError」をスローしません。 代わりに、警告を発行して「null」として返します。
PHP 8.0 は、パラメーターの型が一致しない場合に内部パラメーター解析 API が「ThrowError」を生成するようにする RFC を提案することで、これらの矛盾に対処しています。 このため、すべての内部関数の動作がより一貫しています。
新しいクラス、インターフェース、および関数
PHP 8.0 で注目すべき新しい変更点の 1 つに、WeakMap クラスがあります。 一般に、弱いマップは、弱い参照キーを持つデータまたはオブジェクトのコレクションです。 データを弱参照すると、データが破壊されるのを防ぐことができず、パフォーマンスが低下し、メモリ リークが発生します。
PHP 7.4 は、データへの参照を保持する弱参照をサポートしていますが、データの破壊を妨げません。 ただし、生の弱い参照はそれ自体に限定されます。
一方、弱いマップは実際にははるかに一般的です。 しかし、PHP の弱参照の上に効率的な弱マップを実装することは不可能です。 PHP 8.0 の WeakMap クラスを使用すると、開発者はまさにそれを行うことができます。 開発者またはプログラムが破棄できる弱いマップ キーとしてオブジェクトを作成できます。 つまり、PHP は、これらのオブジェクトを長時間参照するものがない場合、これらのオブジェクトをガベージと見なして収集します。
多くの便利な PHP 8.0 の新機能に追加されたもう 1 つの機能は、Stringable インターフェイスです。 この RFC は、この関数を「__toString()」メソッドを実装するすべてのクラスに自動的に追加します。 これは、クラスがコードを実装するたびに、開発者がインターフェイスを手動でエンコードする必要がないことを意味します。
以前のバージョンの PHP では、「strstr」と「strpos」は、開発者が文字列内の針を探すための標準オプションでした。 残念なことに、多くの人は両方の機能が十分に直感的ではなく、新しい PHP 開発者を混乱させる可能性があると考えていました。 現在、新しい「str_contains」関数を使用して、文字列内をより簡単に検索できます。
str_contains に加えて、PHP 8.0 は「str_starts_with()」と「str_ends_with()」を提供して、文字列内の針検索を改善します。
その他の新しい関数には、「fdiv()」、「get_debug_type()」、「get resource_id()」、「token_get_all()」オブジェクトの実装、および DOM Traversal API と Manipulation API が含まれます。
型システムとエラー処理
PHP 8.0 では、さまざまなシステムおよびエラー処理の改善も提供されています。 そのうちの1つが混合タイプです。 「混合タイプ」は、コード内のタイプの欠落を防ぐのに役立ちます。 PHP では、型の欠落は、関数が null を返すか、いくつかの型の 1 つを返すか、または型ヒントを指定できない型を返すことを意味します。
一般に、「混合」とは、配列、ブール値、callable、int、float、null、オブジェクト、リソース、および文字列を意味します。 新しい混合型により、開発者はパラメーター、クラス プロパティ、および関数の戻り値に型を追加できます。 これを行うと、型情報が忘れられたのではなく、より正確に指定されたことを示すのに役立ちます。
PHP 8.0 がもたらすもう 1 つの注目すべき改善点は、静的な戻り値の型です。 PHP 8.0 より前では、「self」は返せましたが、「static」は返せませんでした。 現在、PHP の動的型付けの性質により、開発者はこの機能が非常に便利であることに気付くでしょう。
PHP が提供するその他の型システムとエラー処理の改善には、抽象トレイト メソッドの検証、マジック メソッドの正しいシグネチャ、プライベート メソッドによる継承、および再分類されたエンジン警告が含まれます。 また、Curl、Gd、Sockets、OpenSSL、XMLWriter、および XML 拡張機能のリソースではなく、互換性のないメソッド シグネチャと不透明なオブジェクトの致命的なエラーもあります。
その他の構文の更新
PHP 8.0 では、多くの構文の改善も行われています。 たとえば、開発者は「throw」をステートメントの代わりに式として使用できるようになり、さまざまな場所で例外をスローできるようになりました。
さらに、PHP 8.0 には変数構文 RFC もあり、プログラムの変数構文の複数の矛盾を解決するのに役立ちます。 この RFC を通じて、開発者は見過ごされていた小さなケースを処理できるようになりました。
さらに、PHP 8.0 は非キャプチャー catch も提供します。 更新前は、開発者は例外をキャッチしたい場合、例外を変数に格納していました。 非キャプチャ キャッチでは、変数を省略できます。
さらに、開発者は名前空間の名前を単一のトークンとして扱い、オブジェクトで「::class」を許可できるようになりました。 さらに、パラメーター リストの末尾のコンマを許可し、クロージャーはリスト RFC を使用します。
新しい PHP が WordPress サイトに与える影響
現在、WordPress は PHP バージョン 7.4、8.0、および 8.1 をサポートしています。 残念ながら、一部のユーザーは、新しいバージョンがお気に入りのテーマやプラグインと互換性がないため、アップグレードに消極的です.
一方、互換性の問題は、5.9 や 6.0 などの最新の WordPress バージョンを使用していない場合にのみ発生します。 一部のユーザーは、最新の PHP バージョンへのアップグレードを妨げているレガシーまたは古いソフトウェアを使用することを好むため、そうしないことを好みます。 このため、開発プロセスでより多くの問題に遭遇する傾向があります。
一方、WordPress サイトで最新バージョンの PHP を試した開発者は、新しい機能と改善のおかげで、より優れた簡単な開発を体験できます。 PHP 8.0 および 8.1 は、優れたエラー処理と最適化を提供します。 さらに、8.1 では、今後数年間でアクティブなサポートとセキュリティ アップデートが予定されています。
PHP の更新に向けて WordPress サイトを準備する
前述のとおり、PHP 8.0 には古い WordPress バージョンとの特定の互換性の問題があります。 シームレスな開発エクスペリエンスのために、サイトをバージョン 5.9 または 6.0 に更新して、新しい PHP 機能をサポートすることをお勧めします。
WordPress サイトを最新バージョンにアップグレードすることに気が進まない場合は、まずオンラインでさまざまなツールを使用してテストし、エラーが発生しないかどうかを確認してください。 さらに、新しい PHP 8.0 用にサイトを構成する前に、エラーによるデータ損失を避けるために、最初にサイトを複製することをお勧めします。 完了したら、最新の PHP バージョンでテストして、互換性があるかどうかを確認します。
特定のテーマとプラグインが PHP 8.0 で動作しない場合は、それらを最新バージョンに更新する必要があります。 古い PHP に戻す代わりに、テーマまたはプラグインのサポート チームに連絡して、互換性の問題を知らせてください。 PHP 8.0 および PHP 8.1 とシームレスに連携できるように、サイトの機能を更新する必要があります。
WordPress サイトを強化する
現代のテクノロジーが急速に進歩するにつれて、より競争力のある高機能のサイトに対する需要が高まり続けています。 つまり、新しいトレンドに適応することに消極的であると、サイトが後れを取る可能性があります。
今日、プログラミング言語 PHP は、バージョン 8.0 および 8.1 のおかげで、開発者が以前よりも優れたコーディングを行うのに役立つ新機能を提供しています。 今日の新機能はすでに開発者に多くのことをもたらしていますが、PHP は明日の Web サイトにより多くのことを約束します。