PHP 8.2 の新機能: 包括的な概要

公開: 2023-10-17
ソーシャルプロフィールで共有します。

広く使用されているサーバーサイドスクリプト言語である PHP は、Web 開発の刻々と変化する要求を満たすために常に進化しています。 2022 年 11 月の PHP 8.2 のリリースには、多数のエキサイティングな機能、重要な非推奨、重大なバグ修正が含まれています。 この記事では、PHP 8.2 の新機能の注目すべき側面を深く掘り下げ、開発者がこの最新リリースに何を期待できるかを明らかにします。

目次

新機能

1. 列挙型: 型安全性の導入

おそらく PHP への最も待望の追加機能の 1 つであるバージョン 8.2 では、ついに列挙型 (enum) のネイティブ サポートが導入されました。 列挙型を使用すると、開発者は明示的な型を使用して一連の名前付き値を定義でき、PHP に型安全性の重要な層を追加できます。

enum がどのように機能するかを示す簡単な例を次に示します。

 enum Color { case RED; case GREEN; case BLUE; }

列挙型には値を関連付けることもできるため、さまざまなユースケースに多用途に使用できます。 この機能は、コードを読みやすく、保守しやすくし、定数やマジックナンバーの誤用に起因するバグが発生しにくいようにするのに特に役立ちます。

2. コンストラクターのプロモーション: 定型コードの削減

PHP 8.2 では、クラス定義を簡素化し、定型コードを削減することを目的とした機能であるコンストラクター プロモーションが導入されています。 コンストラクターのプロモーションを使用すると、コンストラクターのパラメーター リストでクラス プロパティを直接宣言して初期化できます。 これにより、個別のプロパティ宣言が不要になり、コードがより簡潔になり、保守が容易になります。

 class User { public function __construct( public string $name, public string $email, public ?string $bio = null ) {} }

コンストラクターのプロモーションは、コードベース内の混乱を軽減するため、多くのプロパティを持つクラスを扱う場合に特に役立ちます。

3. 読み取り専用クラス

PHP 8.2 では、読み取り専用クラスにより、開発者は、通常はオブジェクトの作成時に一度だけ設定できるプロパティを持つクラスを定義できます。 これにより、オブジェクトの存続期間全体にわたってプロパティが一定に保たれます。 読み取り専用プロパティは readonly 修飾子を使用して宣言され、クラス コンストラクターで初期化する必要があります。

PHP 8.2 では、プロセスが徹底的に簡素化されています。

 class ReadOnlyClass $publicpassword , #[\SensitiveParameter] $secretpassword ) { throw new \Exception('Error'); } passwords('publicpassword', 'secretpassword');

4.「include」および「require」ステートメントの名前付き引数

PHP 8.2 では、ファイルをインクルードまたは要求するときに名前付き引数を使用できるようになりました。 この機能により、特に複数の引数を受け入れる関数を扱う場合に、コードの可読性が向上します。

 include filename: 'my_file.php', once: true;

これらの引数に名前を付けることで、コードがよりわかりやすくなり、引数の順序が間違っているためにエラーが発生する可能性が減ります。

5. 暗黙的な括弧の非推奨に関する通知

コードの一貫性と可読性を高めるために、PHP 8.2 では、かっこなしで呼び出される関数とメソッドに対する非推奨の通知が導入されています。 これはまだエラーではありませんが、関数を呼び出すときに一貫して括弧を使用するという推奨プラクティスを採用するよう開発者に警告します。

 // Deprecated usage myFunction; // Recommended usage myFunction();

PHP は、暗黙の括弧を使用しないようにすることで、コードの明瞭さと保守性を向上させることを目指しています。

6. 機密パラメータ値の隠蔽のサポート

PHP は、特定のプログラム状態でコール スタックを監視する機能を提供します。これは、アプリケーションの問題のトラブルシューティングを行う場合に特に役立ちます。 ただし、場合によっては、スタック トレースには、秘匿する必要がある機密の詳細が含まれる場合があります。

PHP 8.2 では、「SensitiveParameter」という名前の新しい属性が導入されます。 この属性は、アプリケーションでエラーが発生したときに機密データが表示または記録されないように難読化するために機能します。 実際には、その使用法は次のようになります。

 function passwords( $publicpassword , #[\SensitiveParameter] $secretpassword ) { throw new \Exception('Error'); } passwords('publicpassword', 'secretpassword');

7. mysqli_execute_query 関数と mysqli::execute_query メソッドの紹介

Web 開発用の多用途スクリプト言語である PHP は、その機能と使いやすさを向上させるために継続的に進化しています。 PHP 8.2 では、開発者は、mysqli_execute_query 関数と mysqli::execute_query メソッドという 2 つの新機能の導入を期待できます。 これらの追加機能は、データベースの対話を合理化および簡素化するように設計されており、MySQL データベースの操作がさらに便利になります。

mysqli_execute_query関数

mysqli_execute_query 関数は、PHP の MySQLi 拡張機能への強力な追加機能です。 これは、MySQL データベースに対して SQL クエリを実行するように特に調整されています。 この関数は、SQL クエリを送信して結果を取得する簡単かつ効率的な方法を提供します。 その使用法の簡単な例を次に示します。

 $mysqli = new mysqli("localhost", "username", "password", "database"); $sql = "SELECT * FROM users WHERE status = ?"; $stmt = $mysqli->prepare($sql); $status = "active"; $stmt->bind_param("s", $status); $result = mysqli_execute_query($stmt); while ($row = $result->fetch_assoc()) { } $stmt->close(); $mysqli->close();

mysqli_execute_query 関数は、パラメーター バインディングを通じてセキュリティを維持しながら、クエリの準備と実行のプロセスを合理化します。

mysqli::execute_query メソッド

新しい関数に加えて、PHP 8.2 では MySQLi クラスの一部として mysqli::execute_query メソッドが導入されています。 この方法により、オブジェクト指向プログラミングを好む開発者にとってクエリの実行が簡素化されます。 その使用例を次に示します。

 $mysqli = new mysqli("localhost", "username", "password", "database"); $sql = "SELECT * FROM products WHERE category = ?"; $stmt = $mysqli->prepare($sql); $category = "electronics"; $stmt->bind_param("s", $category); $result = $stmt->execute_query(); while ($row = $result->fetch_assoc()) {} $stmt->close(); $mysqli->close();

mysqli::execute_query メソッドは、データベース クエリを実行するためのオブジェクト指向のアプローチを提供し、このスタイルのコーディングを好む開発者にとってより直感的なエクスペリエンスを提供します。

8. トレイトでの定数の許可: コードの再利用性と保守性の向上

トレイトは、PHP などの最新のプログラミング言語の貴重な機能であり、開発者が継承を必要とせずに、さまざまなクラス間でコードを再利用できるようになります。 PHP トレイトは主にメソッドを提供しますが、PHP 8.2 では、トレイト内で定数を定義する機能という注目すべき拡張機能が導入されています。 この機能は、コードの編成、再利用性、保守性を向上させ、開発者にコード設計の柔軟性を提供することを目的としています。

PHP におけるトレイトの役割

トレイトへの定数の追加について詳しく説明する前に、PHP におけるトレイトの役割を簡単に振り返ってみましょう。 トレイトは、PHP などの単一継承言語でコードを再利用するためのメカニズムです。 これらを使用すると、複数のクラス間で再利用できるメソッドのセットを定義できます。 クラスがトレイトを使用すると、そのトレイトで定義されたメソッドが継承され、コードのモジュール性が強化され、冗長性が削減されます。

 trait Loggable { public function log($message) { }} class User { use Loggable; public function register() { $this->log('User registered.'); }}

この例では、Loggable トレイトにより、そのトレイトを組み込んだ任意のクラスで使用できるログ メソッドが提供され、コードの保守性と構成が向上します。

特性の定数: 新機能

PHP 8.2 では、開発者は、以前のバージョンの PHP では不可能であった特性内で定数を定義できるようになりました。 トレイトの定数はクラスの定数と同様に機能しますが、トレイトを使用するクラスでアクセスできます。

 trait Configuration {
const MAX_CONNECTIONS = 10;
}class Database {
use Configuration;
public function connect() { $maxConnections = self::MAX_CONNECTIONS; } }

この例では、Configuration 特性により MAX_CONNECTIONS 定数が定義されており、この定数は特性を使用する Database クラス内でアクセスできます。 これにより、構成定数の一元化が可能になり、より組織化され保守しやすいコード構造が促進されます。

9. PHP 8.2 での新しい論理和正規形 (DNF) 型の導入

PHP は動的で多用途なスクリプト言語であり、増え続ける Web 開発の需要を満たすために進化し続けています。 PHP 8.2 のリリースにより、開発者は新しい論理和正規形 (DNF) 型の導入を楽しみにしています。 この言語への追加により、PHP の表現力と柔軟性が強化され、開発者が複雑な論理式をより効果的に操作できるようになります。

選言正規形 (DNF) を理解する

PHP 8.2 の新しい DNF 型を詳しく調べる前に、論理和正規形 (DNF) が何を表すかを理解することが重要です。 DNF は論理式を表す標準的な形式で、各式は論理積 (AND) の論理和 (OR) です。 簡単に言うと、複雑な論理ステートメントを OR 演算子で結合された一連の単純な条件に分解する方法です。

たとえば、論理式 (A AND B) OR (C AND D) は 2 つの接続詞の論理和であるため、DNF になります。

PHP 8.2 の新しい DNF タイプ

PHP 8.2 では、論理式をより直観的に操作および操作する方法として、新しい DNF 型が導入されています。 これらの DNF タイプは、複雑なロジックを処理するための高レベルの抽象化を提供し、開発者がコード内の複雑な条件を管理しやすくします。

新しい DNF タイプとその使用方法の概要を次に示します。

1. 選言正規形

DisjunctiveNormalForm 型は、DNF の論理式を表します。 DisjunctiveNormalForm インスタンスを作成して、複雑な条件をカプセル化できます。

 $dnfExpression = new DisjunctiveNormalForm(
new Conjunction('A', 'B'),
new Conjunction('C', 'D')
);

この例では、$dnfExpression は DNF 式 (A AND B) OR (C AND D) を表します。

2.接続詞

Conjunction タイプは、1 つ以上の条件の論理積 (AND) を表します。 Conjunction のインスタンスを作成して、複雑な接続詞を構築できます。

 $conjunction = new Conjunction('A', 'B', 'C');

ここで、$conjunction は結合 (A AND B AND C) を表します。

3. 論理値

LogicalValue タイプは、true、false、または変数のいずれかの単純な論理値を表します。 他の DNF タイプと組み合わせて使用​​すると、より複雑な式を構築できます。

 $value = new LogicalValue('A');

ここで、$value は論理変数 A を表します。

10.AllowDynamicProperties 属性の導入: PHP の柔軟性の拡張

「AllowDynamicProperties」属性は、特に言語の動的な性質を重視する開発者にとって、PHP への注目すべき追加機能です。 この属性を使用すると、オブジェクトがそのクラス内で明示的に定義されていないプロパティを受け入れて操作できるようになります。

「AllowDynamicProperties」属性を適用する方法の簡単な例を次に示します。

 class DynamicObject {
}
$dynamicObj = new DynamicObject();
$dynamicObj->newProperty = "This is a dynamic property.";
echo $dynamicObj->newProperty;

この例では、「DynamicObject」クラスに「AllowDynamicProperties」属性がマークされており、プロパティを動的に追加してアクセスできるようになります。 この動的な動作は、さまざまなデータ構造に適応する必要があるオブジェクトを扱うとき、または API などの外部ソースからのデータを扱うときに特に役立ちます。

PHP 8.2 での非推奨と削除

  • 拡張機能: PHP 8.2 は、「oci8」、「mysql」、「mcrypt」、「interbase」など、古くてメンテナンスされていないいくつかの拡張機能に別れを告げました。 これらの拡張機能に依存している開発者は、アプリケーションのセキュリティと安定性を確保するために、最新の代替機能に移行することを強くお勧めします。
  • each() 関数: each() 関数は PHP 8.2 で正式に非推奨になりました。 この関数は、内部ポインターを進めて現在のキーと値のペアを返すことによって配列を反復するために使用されていました。 ただし、これにはさまざまな問題があり、可読性と保守性が向上した foreach ループに大部分が置き換えられました。
  • create_function() 関数: create_function() 関数は非推奨としてマークされています。 この関数は匿名関数を動的に作成するために使用されましたが、セキュリティ上の懸念とクロージャのようなより良い代替手段があるため、推奨されませんでした。
  • FILTER_SANITIZE_MAGIC_QUOTES フィルター フラグ: FILTER_SANITIZE_MAGIC_QUOTES フィルター フラグは非推奨になりました。 このフラグは、一重引用符や二重引用符などの文字の前にスラッシュを追加することで入力をサニタイズするために、filter_var() とともに使用されました。 最新のベスト プラクティスでは、プリペアド ステートメントとパラメーター化されたクエリを使用してデータベース入力を処理することが推奨されているため、このフラグは廃止されています。
  • stristr() 関数: 文字列内の部分文字列の大文字と小文字を区別しない検索を実行する stristr() 関数は非推奨になりました。 これはまだ機能しますが、開発者は、大文字と小文字を区別しないバージョン、stripos()、またはよりわかりやすくするための代替バージョン str_contains() を使用することをお勧めします。
  • 配列引数を使用したdefine() : 値として配列を使用して定数を定義するためにdefine()を使用することは非推奨になりました。 値として配列を使用して定数を定義することは可能ですが、この方法は慣例的ではないと考えられており、通常、定数はスカラー値を持つ必要があります。
  • SORT_NUMERIC フラグと SORT_REGULAR フラグ:sort() や usort() などのソート関数の SORT_NUMERIC フラグと SORT_REGULAR フラグは非推奨になりました。 PHP は要素のデータ型を自動的に検出し、それに応じて並べ替えるため、これらのフラグはもう必要ありません。

パフォーマンスの向上

PHP 8.2 では、内部でさまざまなパフォーマンスの強化と最適化が行われています。 これらの改善の程度は特定の使用例によって異なる場合がありますが、PHP 8.2 にアップグレードすると、顕著なパフォーマンス上の利点が得られる可能性があります。 これらの改善は、トラフィックの多いアプリケーションやリソースを大量に消費するタスクを実行するアプリケーションに大きな影響を与え、アプリケーションの応答性と効率性が向上します。

バグ修正と安定性

新しい PHP リリースと同様に、PHP 8.2 では多数のバグと安定性の問題に対処しています。 これらの修正は、言語の全体的な信頼性を維持し、PHP が Web 開発の強力な選択肢であり続けるために重要です。

よくある質問 - PHP 8.2 の新機能

PHP 8.2 で暗黙的な括弧の非推奨通知が導入されたのはなぜですか?

暗黙的な括弧の非推奨通知は、関数を呼び出すときに括弧を使用するように開発者に警告することで、一貫したコード スタイルを奨励します。 これにより、コードの明瞭さと保守性が向上します。

読み取り専用クラスとは何ですか? PHP 8.2 ではどのように機能しますか?

PHP 8.2 の読み取り専用クラスを使用すると、プロパティを 1 回だけ (通常はオブジェクトの作成時に) 設定できるため、オブジェクトの存続期間を通じてプロパティが一定のままになります。 読み取り専用プロパティは、readonly 修飾子を使用して宣言されます。

mysqli_execute_query 関数と mysqli::execute_query メソッドは、PHP 8.2 でデータベースの対話をどのように簡素化しますか?

これらの機能は、MySQL データベースに対して SQL クエリを実行するプロセスを合理化し、手続き型またはオブジェクト指向の方法でクエリを送信し、結果を取得するための効率的かつ安全な方法を提供します。

「AllowDynamicProperties」属性は PHP 8.2 の柔軟性をどのように拡張しますか?

「AllowDynamicProperties」属性を使用すると、オブジェクトがクラス内で明示的に定義されていないプロパティを受け入れて操作できるようになり、PHP の動的な性質が強化されます。

PHP 8.2 ではバグ修正と安定性が重要なのはなぜですか?

PHP 8.2 のバグ修正と安定性の向上は、言語全体の信頼性を維持するために非常に重要であり、問​​題に対処し安定性を強化することで、PHP が Web 開発における強力な選択肢であり続けることを保証します。

結論

結論として、PHP 8.2 は、進化し続ける Web 開発環境において極めて重要なマイルストーンとして浮上します。 幅広い革新的な機能、強化された柔軟性、パフォーマンスの最適化により、世界中の開発者の進化する要求に応えます。

列挙型、コンストラクターのプロモーション、読み取り専用クラス、名前付き引数、AllowDynamicProperties 属性の導入により、開発者はよりクリーンで保守しやすいコードを作成できるようになります。 さらに、新しい論理和正規形 (DNF) 型により、PHP に高度な論理操作機能がもたらされ、その汎用性がさらに拡張されます。 ただし、PHP は進歩するにつれて、バグに熱心に対処しながら、時代遅れの拡張機能や機能に別れを告げ、Web 開発にとって信頼性が高く安全な選択肢であり続けることを保証します。

関連性のあるコンテンツ:

「WordPress を無効にする PHP アップデートが必要です」エラーを修正する方法 (2 つの方法)

MySQL スロークエリログ