目次
列挙とは何ですか?
タイプの安全性を向上させる:「魔法の価値」から明示的なタイプまで
バックされた酵素:スカラー値をバインドします
列挙方法と動作の拡張
実際の提案と使用シナリオ
要約します
ホームページ バックエンド開発 PHPチュートリアル PHP 8.1列挙:タイプセーフ定数の新しいパラダイム

PHP 8.1列挙:タイプセーフ定数の新しいパラダイム

Jul 28, 2025 am 04:43 AM
PHP Data Types

PHP 8.1で導入された酵素は、魔法の価値の問題を解決するタイプセーフ定数コレクションを提供します。 1. enumを使用して、ステータス::ドラフトなどの固定定数を定義して、定義された値のみが利用可能であることを確認します。 2。列挙された列挙を介して列点または整数に酵素をバインドし、()とtryfrom()からのサポートを介して、スカラーと列挙間を変換します。 3.列挙は、ビジネスロジックのカプセル化を強化するために、Color()やISEDABLE()などの方法と動作を定義できます。 4。動的データではなく、状態や構成などの静的シナリオに適用できます。 5.タイプの制約のためにUnitenumまたはBackedenumインターフェイスを実装し、コードの堅牢性とIDEサポートを改善できます。これは、最新のPHP開発の重要な機能です。

PHP 8.1列挙:タイプセーフ定数の新しいパラダイム

PHP 8.1は、タイプの安全性とコードメンテナビリティの観点から、PHPの重要な前進をマークした酵素(酵素)を導入しました。過去には、クラス定数またはグローバル定数を使用してエンコードされたパフォーマンスをシミュレートしましたが、これらの方法はタイプの制約がなく、違法な値が渡されるのを防ぐことができず、IDEで良いプロンプトを取得することは困難です。列挙の出現は、これらの問題を正確に解決することです。

PHP 8.1列挙:タイプセーフ定数の新しいパラダイム

列挙とは何ですか?

列挙は、指名された定数のセットを定義するために使用される特別なデータ型です。 PHP 8.1では、 enum言語でネイティブにサポートされているキーワードになり、値がいくつかの事前定義されたオプションの1つにすぎないタイプを定義できます。

列挙ステータス
{
    ケースドラフト;
    公開されたケース;
    ケースアーカイブ;
}

今、 Status::DraftStatus::PublishedStatus::Archived唯一の法的価値です。 'draft'1意志のような文字列や数字を渡すことはできなくなりました。これにより、タイプの安全性が大幅に向上します。

PHP 8.1列挙:タイプセーフ定数の新しいパラダイム

タイプの安全性を向上させる:「魔法の価値」から明示的なタイプまで

列挙が発生する前に、このようなコードがよく表示されます。

関数setStatus(String $ status):void {
    if(!in_array($ status、['draft'、 'published'、 'archived'])){
        新しいInvalidargumentException( 'invalid status')を投げます。
    }
    // ...
}

この執筆の問題は次のとおりです。

PHP 8.1列挙:タイプセーフ定数の新しいパラダイム
  • 'draft'は、綴りやすい「魔法のひも」です。
  • コンパイル時間チェックはなく、エラーは実行時にのみ見つけることができます。
  • IDEは法的価値を推測することはできません。

ENUMを使用した後:

関数setStatus(status $ status):void {
    //タイプシステムは、法的ステータスの列挙値で合格したことを保証します}

// setStatus(status :: draft);

これで、違法価値を渡すと、PHPはエラーを直接報告します(特に厳密なタイプが有効になっている場合)、IDEは自動完了とエラープロンプトを提供することもできます。


バックされた酵素:スカラー値をバインドします

列挙値が特定の文字列または整数(データベースに保存されているなど)に対応することを望む場合があります。 PHP 8.1は、これをサポートするための裏付けられた列挙を提供します。

 enum orderstatus:文字列
{
    CASE PENDING = 'PENDING';
    ケース出荷= '出荷';
    ケース配信= '配信';
}

EnumとScalarの間で簡単に変換できます。

 //文字列$ status = orderstatus ::( 'phends')から列挙を作成します。 // orderstatus ::保留中の返品
$ status = orderstatus :: tryfrom( 'nown'); // nullを返します(例外はありません)

//基礎となる値を取得しますecho $ status-> value; //出力「保留中」

これは、データベース、APIリクエスト、その他のシナリオの処理において非常に実用的です - 文字列を安全に列挙に変換し、タイププロンプトを使用して、後続のロジックが正しいことを確認できます。


列挙方法と動作の拡張

列挙は、定数を含むだけでなく、メソッドを定義し、インターフェイスを実装することもできます。

列挙ステータス
{
    ケースドラフト;
    公開されたケース;
    ケースアーカイブ;

    パブリック関数Color():文字列
    {
        return match($ this){
            self :: draft => 'gray'、
            自己::公開=> 'green'、
            self :: archived => 'red'、
        };
    }

    パブリック関数isedable():bool
    {
        return $ this === self :: draft || $ this === self ::公開;
    }
}

使用例:

エコーステータス::ドラフト - > color(); //灰色
var_dump(status :: archived-> isedable()); // 間違い

これにより、単なる「値のセット」以上のものがなりますが、行動を運ぶことができ、実際のドメインモデルの一部になります。


実際の提案と使用シナリオ

  • statusフィールド:注文ステータス、記事ステータス、ユーザーロールなど。
  • Configurationオプション:たとえば、 OutputFormat::JsonOutputFormat::Xml
  • [入力検証]をフォームします:DTOと組み合わせて使用して、入力値が法的セットに属していることを確認します。
  • subsedしないでください:値が動的である場合(データベース構成テーブルから)、列挙には適していません。

ヒント:Enumに、 UnitEnumまたはBackedEnumインターフェイスを実装して、タイプの制約を行うことができます。

関数ProcessEnum(Unitenum $ Enum):void {...}

要約します

PHP 8.1のenumsは単なる構文糖ではなく、真のタイプの安全性、より良い読みやすさ、より強力なツールサポートをもたらします。 「魔法の価値」を排除し、コードの堅牢性を改善することにより、定数と状態の整理方法を変えています。

基本的にこれはそれです - それは複雑ではありませんが、それが使用されると、返されることはできません。

以上がPHP 8.1列挙:タイプセーフ定数の新しいパラダイムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PHP 8のユニオンタイプでコードベースを近代化します PHP 8のユニオンタイプでコードベースを近代化します Jul 27, 2025 am 04:33 AM

upgradephp7.xcodebasestophp8 byreplacingphpdoc-suggestedtypeslike@paramstring | intwithnativeuniontypessuchasstring | intforparametersandreturntypes、whithemprovestypeSafetyandclarity;

PHP 8.1列挙:タイプセーフ定数の新しいパラダイム PHP 8.1列挙:タイプセーフ定数の新しいパラダイム Jul 28, 2025 am 04:43 AM

php8.1で導入された酵素は、魔法の価値の問題を解決するタイプセーフ定数コレクションを提供します。 1. enumを使用して、ステータス::ドラフトなどの固定定数を定義して、定義された値のみが利用可能であることを確認します。 2。列挙型をバックデナムに介して弦または整数にバインドし、スカラーと酵素間の()とtryfrom()からの変換をサポートします。 3。酵素は、ビジネスロジックのカプセル化を強化するために、color()やisedable()などの方法と動作を定義できます。 4。動的データではなく、状態や構成などの静的シナリオに適用できます。 5.タイプの制約のためにUnitenumまたはBackedenumインターフェイスを実装し、コードの堅牢性とIDEサポートを改善し、

精度の危険:PHPの浮動小数点数を処理します 精度の危険:PHPの浮動小数点数を処理します Jul 26, 2025 am 09:41 AM

0.1 0.2!== 0.3inphpduetobinary floating-precisionlimitations、sodevelopersmustavoiddirectcomparisonsandusepsilonベースのチェック、empluebcmathorgmtic、emplovebcmathorgmetic、storecurrencyinintegersegorsible、formatutcoputputputputputtutputpotised、およびneverrelelelyonfrocisis

PHPの二重性:ゆるいタイピングと厳密なタイプの宣言のナビゲート PHPの二重性:ゆるいタイピングと厳密なタイプの宣言のナビゲート Jul 26, 2025 am 09:42 AM

PHPは、ゆるいタイプと厳格なタイプの共存をサポートします。これは、スクリプト言語から最新のプログラミング言語への進化の中心的な特徴です。 1.ゆるいタイプは、迅速なプロトタイピング、動的なユーザー入力の処理、または外部APIでのドッキングに適していますが、暗黙のタイプ変換のリスク、デバッグの難しさ、ツールサポートの弱いなどの問題があります。 2。decrare(strict_types = 1)で厳密なタイプが有効になります。これは、事前にエラーを検出し、コードの読みやすさとIDEサポートを改善することができ、コアビジネスロジック、チームコラボレーション、データの整合性の高い要件を備えたシナリオに適しています。 3。実際の開発で混合使用を使用する必要があります。デフォルトでは厳密なタイプが有効になり、緩いタイプは入力境界で必要な場合にのみ使用され、検証とタイプ変換はできるだけ早く実行されます。 4.推奨されるプラクティスには、PHPSTAの使用が含まれます

「Callable」疑似タイプとその実装を理解する 「Callable」疑似タイプとその実装を理解する Jul 27, 2025 am 04:29 AM

acallable inphpisapsapsodo-typereprepreSentingnayvaluethatcanbeedusings the()演算子は、主に使用されています

「Mixed」から「void」まで:PHPリターンタイプ宣言の実用的なガイド 「Mixed」から「void」まで:PHPリターンタイプ宣言の実用的なガイド Jul 27, 2025 am 12:11 AM

returntypesinphpimprovecoderiability andclaritybysifyifiecifyive whatafunctionmusterturn.2.usebasictypeslikestring、array、ordatetimetoenforcorcreturnvaluesandcatcherrorsearly.3.ApplynullabletypeSwith?(E.G。、?

PHPのリソース管理:「リソース」タイプのライフサイクル PHPのリソース管理:「リソース」タイプのライフサイクル Jul 27, 2025 am 04:30 AM

PHPリソースのライフサイクルは、次の3つの段階に分けられます。1。リソース作成、Fopenやcurl_initなどの関数を介して外部システムハンドルを取得します。 2。リソースの使用、操作のための関連関数にリソースを渡す、PHPはリソースIDを介して基礎となるシステム構造にマップします。 3。ファイル記述子が消耗しないように、自動ガーベージコレクションに依存しないように、リソースをリリースするために、Fclose、curl_close、およびその他の機能を手動で呼び出すリソースの破壊を優先する必要があります。ベストプラクティスは次のとおりです。常に明示的にリソースを閉じ、試してみてください...最後にクリーンアップを確保し、__DestructをサポートするPDOなどのオブジェクトに優先順位を付け、グローバルストレージリソースを避け、get_resources()を介してアクティブリソースを監視する

変数の寿命:PHPの内部「zval」構造が説明されています 変数の寿命:PHPの内部「zval」構造が説明されています Jul 27, 2025 am 03:47 AM

PHPはZVAL構造を使用して変数を管理します。答えは次のとおりです。1。ZValには、16バイトのサイズの値、タイプ、メタデータが含まれています。 2。タイプが変更されたら、組合とタイプ情報のみを更新する必要があります。 3。複雑なタイプは、ポインターを介した参照カウントを持つ構造を指します。 4.値を割り当てるとき、コピーを使用してメモリを最適化します。 5。参照変数が同じZVALを共有するようにします。 6.リサイクル参照は、特別なゴミコレクターによって処理されます。これは、PHP変数の動作の根本的なメカニズムを説明しています。

See all articles