PHP8.1 の新機能の説明 Enums 列挙
この記事は翻訳です。元のアドレス: https://stitcher.io/blog/php-enums
PHP 8.1: Enumerations
ついに登場しました - 列挙型の組み込みサポートが PHP 8.1 で追加される予定です。ずっと前にそうすべきだったと思う人もいるかもしれませんが、あなたは私の苦情を聞いてくれませんでした。彼らがそうしてくれて良かったと思います。この記事では、新しく追加された機能について詳しく説明します。
私の PHP 特集投稿ではいつものように、列挙型がどのようなものであるかについての概要から始めます:
enum Status { case DRAFT; case PUBLISHED; case ARCHIVED; }
列挙型の利点は、列挙型が一連の定数値を表すことですが、最も重要なことは、これらの値が次のように入力できることです:
class BlogPost { public function __construct( public Status $status, ) {} }
この例では、列挙型を作成して aBlogPost に渡すのは次のようになります:
$post = new BlogPost(Status::DRAFT);
これが基本です。ご覧のとおり、それらはまったく複雑ではありません。補足事項はたくさんありますが、列挙について詳しく見てみましょう。
#列挙メソッド
列挙では、クラスと同様にメソッドを定義できます。これは、特に match 演算子と組み合わせた場合に非常に強力な機能です:
enum Status { case DRAFT; case PUBLISHED; case ARCHIVED; public function color(): string { return match($this) { Status::DRAFT => 'grey', Status::PUBLISHED => 'green', Status::ARCHIVED => 'red', }; } }
メソッドは次のように使用できます:
$status = Status::ARCHIVED; $status->color(); // 'red'
静的メソッドも使用できます:
enum Status { // … public static function make(): Status { // … } }
You列挙型で self を使用することもできます:
enum Status { // … public function color(): string { return match($this) { self::DRAFT => 'grey', self::PUBLISHED => 'green', self::ARCHIVED => 'red', }; } }
#列挙型インターフェイス
列挙型は、通常のクラスと同様にインターフェイスを実装できます:
interface HasColor { public function color(): string; } enum Status implements HasColor { case DRAFT; case PUBLISHED; case ARCHIVED; public function color(): string { /* … */ } }
# 列挙値 - 別名「バックド列挙」
列挙値は内部的にオブジェクトによって表されますが、必要に応じて値を割り当てることができます。これは、たとえば機能する場合に便利です。それらをデータベースにシリアル化します。
enum Status: string { case DRAFT = 'draft'; case PUBLISHED = 'published'; case ARCHIVED = 'archived'; }
列挙定義内の型宣言に注意してください。すべての列挙値が指定された型に属していることを示します。 int にすることもできます。列挙値として許可されるのは int と string だけであることに注意してください。
enum Status: int { case DRAFT = 1; case PUBLISHED = 2; case ARCHIVED = 3; }
型列挙型の専門用語は、より単純な値によって「裏付けられる」ため、「裏付け列挙型」と呼ばれます。列挙値を割り当てる場合は、すべてのケースに値が必要です。これらを組み合わせて使用することはできません。 「裏付け」のない列挙は「純粋な列挙」と呼ばれます。
#インターフェイスでサポートされる列挙型
サポートされる列挙型をインターフェイスで使用する場合、列挙型は列挙名の直後に指定し、キーワードの前に実装する必要があります。
enum Status: string implements HasColor { case DRAFT = 'draft'; case PUBLISHED = 'published'; case ARCHIVED = 'archived'; // … }
#シリアル化でサポートされる列挙型
列挙型ケースに値を割り当てる場合は、それらをシリアル化および逆シリアル化する方法が必要になる場合があります。シリアル化するということは、列挙値にアクセスする方法が必要になることを意味します。これは、読み取り専用のパブリック プロパティを介して行われます:
$value = Status::PUBLISHED->value; // 2
列挙は、次を使用して値から復元できます: Enum::from
$status = Status::from(2); // Status::PUBLISHED
不明な値が渡された場合、tryFrom もあります。 null を返します。 from を使用する場合は例外があります。
$status = Status::from('unknown'); // ValueError $status = Status::tryFrom('unknown'); // null
列挙型に対して組み込みのシリアライズ関数とアンシリアライズ関数を使用することもできることに注意してください。さらに、サポートされている列挙型で json_encode を使用することができ、結果は列挙値になります。この動作は、JsonSerializable を実装することでオーバーライドできます。
#列挙値のリスト
静的メソッド Enum::cases()
Status::cases(); /* [ Status::DRAFT, Status::PUBLISHED, Status::ARCHIVED ] */
array_map( fn(Status $status) => $status->color(), Status::cases() );
#列挙はオブジェクトです
列挙値は実際のオブジェクトとして表されることはすでに述べました。上にはシングルトン オブジェクトがあります。これは、次のように比較できることを意味します。$statusA = Status::PENDING; $statusB = Status::PENDING; $statusC = Status::ARCHIVED; $statusA === $statusB; // true $statusA === $statusC; // false $statusC instanceof Status; // true
# Enums as Array Keys
enum 値は実際にはオブジェクトであるため、現時点ではそれらを比較する方法はありません。配列キーとして使用されます。次の場合はエラーが発生します:$list = [ Status::DRAFT => 'draft', // … ];
#Traits
列挙型ではクラスと同様に特性を使用できますが、さらに制限があります。組み込み列挙メソッドのオーバーライドは許可されておらず、クラス属性を含めることはできません。列挙での使用は禁止されています。#Reflection とプロパティ
予想どおり、列挙を処理するためにいくつかのリフレクション クラス (ReflectionEnum、ReflectionEnumUnitCase、および ReflectionEnumBackedCase) が追加されました。新しい enum_exists 関数もあり、その名前が示すとおりの動作をします。 通常のクラスや属性と同様に、列挙型とそのケースには属性を使用して注釈を付けることができます。 TARGET_CLASS フィルターには列挙も含まれることに注意してください。 最後にもう 1 つ: 列挙型には読み取り専用属性もあります。RFC では、これは実装の詳細であり、デバッグ目的でのみ使用する必要があると述べられています。しかし、それでも言及する価値はあります。$列挙型->名前
以上がPHP8.1 の新機能の説明 Enums 列挙の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









php5 と php8 の違いは、パフォーマンス、言語構造、型システム、エラー処理、非同期プログラミング、標準ライブラリ関数、セキュリティの点です。詳細な紹介: 1. パフォーマンスの向上. PHP5 と比較して、PHP8 はパフォーマンスが大幅に向上しています. PHP8 では、高頻度の実行コードをコンパイルおよび最適化できる JIT コンパイラーが導入されており、それによって実行速度が向上しています; 2. 言語構造の改善、 PHP8 では、いくつかの新しい言語構造と関数が導入されており、PHP8 では名前付きパラメータがサポートされており、開発者はパラメータの順序などの代わりにパラメータ名を渡すことができます。

mysql 拡張機能を php8 に追加する手順は次のとおりです: 1. MySQL クライアント ライブラリをインストールします; 2. PHP 8 の開発ツールをインストールします; 3. MySQL 拡張機能のソース コードをダウンロードします; 4. MySQL 拡張機能をコンパイルしてインストールします; 5. MySQL 拡張機能; 6. Web サーバーのみを再起動します。

この記事では、apache2.4のインストール方法とphp8.0の設定方法を画像付きで詳しく紹介します。apache2.4+php8.0のインストールと設定方法を見てみましょう~

PHP8 は、mysqli と PDO を使用してデータベースに接続できます。詳細な紹介: 1. mysqli を使用して、データベース サーバー名、ユーザー名、パスワード、および接続するデータベース名を渡してデータベースに接続します。次に、`connect_error` 属性を使用して接続が成功したかどうかを確認し、接続が失敗した場合はエラー メッセージを出力します。最後に、`close()` メソッドを呼び出して接続を閉じます; 2. PDO を使用してデータベースに接続し、データベース サーバー名、パスワード、データベース名などを渡して接続します。

php8 データ型のメソッドには、文字列から整数への変換、整数から文字列への変換、文字列から浮動小数点数への変換、浮動小数点数から文字列への変換、配列から文字列への変換、文字列から配列への変換、およびブール値から整数への変換が含まれます。 . 整数からブール値への変換、変数の型の決定と変換。詳細な紹介: 1. 文字列から整数への変換には、intval() 関数と (int) 強制型変換が含まれます; 2. 整数から文字列への変換には、strval() 関数と (string) 強制型変換が含まれます; 3. 変換文字列を浮動小数点ポイントに変換するなどです。

この記事では、PHP 8 の JIT について説明し、JIT が解釈プロセスにどのように参加するかについて説明します。

php8 のパフォーマンス向上には、1. JIT コンパイラの導入、2. 関数呼び出しの最適化、3. ガベージ コレクション メカニズムの改善、4. 型システムの改善、5. 新しい言語機能、6. 文字列処理の最適化、7.配列処理の改善、8. 新しいメモリ管理メカニズムの導入、9. コード生成の最適化。詳細な紹介: 1. JIT コンパイラーの導入 PHP8 では、より効率的に実行するために PHP コードをマシンコードに変換できる動的コンパイル技術である JIT コンパイラーが導入されています; 2. 関数呼び出しの最適化など。

php8 の機能: 1. JIT コンパイラ; 2. 名前付きパラメータ; 3. 共用体型; 4. アノテーション; 5. コンストラクタ属性の強化; 6. 一致式; 7. nullsafe 演算子; 8. 型システムの改善; 9 、エラー処理の改善; 10. 一貫性の向上。詳細な紹介: 1. JIT コンパイラ、PHP8 は、PHP コードをネイティブ マシン コードにコンパイルするジャストインタイム コンパイル テクノロジを導入し、それによってプログラムの実行速度を向上させます; 2. 名前付きパラメータ、PHP8 は名前付きパラメータをサポートし、関数呼び出し時のパラメータ名など
