目次
2。NULLCOALESCINGオペレーター( ?? ) - 安全なデフォルト値
3。NullSafeオペレーター( ?-> ) - ヌルを恐れることなくチェーン
それをすべてまとめる
ホームページ バックエンド開発 PHPチュートリアル PHPの三元、ヌルの合体、およびヌルサフェのオペレーターを分類します

PHPの三元、ヌルの合体、およびヌルサフェのオペレーターを分類します

Jul 25, 2025 pm 04:48 PM
PHP Syntax

三元演算子(?:)は単純なif-elseロジックに使用され、条件に基づいて2つの値のいずれかを返します。 2。ヌルの合体演算子(??)は、nullまたは未定義でない場合、左オペランドを返します。そうでなければ、適切なオペランドであるため、0や ''などのfalsy値に影響を与えることなくデフォルトを設定するのに最適です。 3. PHP 8に導入されたnullSafe演算子(? - >)は、nullである可能性のあるオブジェクトにメソッドコールまたはプロパティアクセスを安全にチェーンし、ステップがnullの場合は致命的なエラーを引き起こす代わりにnullを返すことができます。一緒に、これらの演算子は条件付きロジックとヌルの取り扱いを合理化し、ボイラープレートコードを削減し、適切に使用すると読みやすさを向上させます。

php \ 's sernary、null coulescing、およびnullsafeオペレーターを分類します

PHPの三元、ヌルの合体、およびヌルサフの演算子は、特に条件付きロジックとヌルチェックを扱うときに、よりクリーナー、より簡潔なコードの書き込みに役立つ強力なツールです。それらを明白な言葉で分解し、それらがどのように機能するか、そしてそれぞれをいつ使用するかを示しましょう。


1。三元演算子( ? : :) - 単純な条件の速記

三元演算子は、単一行でif-elseステートメントを記述するコンパクトな方法です。

構文:

 $ result =条件? value_if_true:value_if_false;

例:

 $ age = 20;
$ status =($ age> = 18)? 「大人」:「マイナー」;
echo $ status; //出力:大人

デフォルトのメッセージの設定や出力のフォーマットなど、簡単な決定に役立ちます。

プロのヒント:ネスティングの三人種を避ける - すぐに読み取れないようになります。

 //従わない
$ result = $ a? ($ b? 'の両方': 'only a'): 'not' not ';

//より良い:複雑なロジックにIF-ELSEを使用します

条件に基づいて2つの値を選択するときは、三元を使用します。シンプルにしてください。


2。NULLCOALESCINGオペレーター( ?? ) - 安全なデフォルト値

このオペレーターは、 null安全に処理することです。左オペランドが存在し、 nullでない場合に左オペランドを返します。そうしないと、右のオペランドを返します。

構文:

 $ result = $ variable ?? 'デフォルト';

例:

 $ username = $ _get ['user'] ?? 'ゲスト';
echo $ username; // $ _get ['user']が設定されていない場合、「ゲスト」を使用します

スーパーグロバル、配列キー、または構成配列で特に便利です。

それを三元と比較してください:

 // Ternaryで -  nullだけでなく、 *真実性 *をチェックします
$ name =!empty($ _ get ['name'])? $ _get ['name']: 'anonymous';

// nullの合体で -  null/未定義のみを気にします
$ name = $ _get ['name'] ?? '匿名';

したがって、 $_GET['name'] = '' (空の文字列)の場合、三元は'Anonymous'を使用しますが、 ?? nullではないため、空の文字列を使用します。

?結論:使用?? nullまたは未定義の値のみを気にする場合、 0'' 、またはfalseような偽の値ではありません。


3。NullSafeオペレーター( ?-> ) - ヌルを恐れることなくチェーン

PHP 8で導入されたNullSafeオペレーターでは、 nullのオブジェクトのメソッドまたはアクセスプロパティを安全に呼び出すことができます。

nullsafeなし(危険):

 $ country = $ user-> getAddress() - > getCountry() - > getName();
//ステップがnullを返す場合は致命的なエラー

nullsafeで:

 $ country = $ user? - > getAddress()? - > getCountry()? - > getName();
//ステップがnullの場合、nullを返します、エラーなし

それぞれ?->次のように述べています。

実世界のユースケース:

 $ displayname = $ apiresponse? - > getUser()? - > getProfile()? - > getDisPlayName()?? 「不明なユーザー」;

これにより、メソッドコールのチェーンが安全に横断され、不足している場合は'Unknown User'に戻ります。

適切な検証の代わりではありませんが、ボイラープレートヌルチェックを削減します。


それをすべてまとめる

これらのオペレーターが協力する方法は次のとおりです。

 class userprofile {
    パブリック関数__construct(private?string $ displayname){}

    パブリック関数getDisPlayName():?string {
        $ this-> displayName;
    }
}

クラスユーザー{
    public function __construct(private?userprofile $ profile){}

    public function getProfile():?userProfile {
        $ this-> profileを返します。
    }
}

$ user = new user(new userProfile( ''));

$ name = $ user? - > getProfile()? - > getDisplayName()?? '匿名';
echo $ name; // outputs :(空の文字列) -  nullではないためです!

待ってください - なぜ'Anonymous'ではないのですか? getDisplayName()が空の文字列( '' )を返したので、それはnullではないので??トリガーしません。

空の文字列を無効なものとして扱いたい場合は、他のロジックと組み合わせてください。

 $ name = $ user? - > getProfile()? - > getDisplayName();
$ name =!empty($ name)? $ name: 'Anonymous'; //空虚をチェックします

または、このパターンが繰り返される場合は、ヘルパー関数を使用します。


これらのオペレーターは魔法ではありませんが、日常のコードをより安全で短くします。それらを賢く使用する:

  • Ternary( ? : :) →単純な真/偽の選択のために
  • null coulescing( ??nullまたは未定義のフォールバックが必要な場合
  • nullsafe( ?-> →オブジェクトの呼び出しをチェーンするとき、それはnullになる可能性があります

彼らは良いデザインに取って代わるものではありませんが、ノイズを減らし、一般的なバグを防ぎます。

基本的に、彼らはあなたが「これが存在するならば、それを手に入れてください」と書くのをやめるのを助けます。

以上がPHPの三元、ヌルの合体、およびヌルサフェのオペレーターを分類しますの詳細内容です。詳細については、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 25, 2025 pm 12:27 PM

php8attributesedocblocksforcadatabyprovidingpe-safe、nativelysupportedannotations.1.attributesededefinedusing#[属性] [属性]、方法、プロパティなど。2

マスターPHPアレイの破壊とスプレッドオペレーター マスターPHPアレイの破壊とスプレッドオペレーター Jul 25, 2025 am 04:44 AM

PHPのアレイ解体および拡張オペレーターは、簡潔な構文を通じてコードの読みやすさと柔軟性を向上させることができます。 1.配列分解は、[$ firnd、$ second] = $ colorsなどのインデックスおよび連想配列から値を抽出することをサポートします。 [、$ 3番目] = $ colorsなど、空のプレースホルダーを通して要素をスキップできます。連想配列の解体には、['name' => $ name] = $ユーザーなど、=>一致キーが必要です。これは、変数の変更とデフォルト値の設定をサポートして、欠落しているキーを処理します。 2。拡張演算子(...)は、[... $ Colors、 'Blue']などの配列を拡張およびマージすることができます。

PHP構文は簡単ですか? PHP構文は簡単ですか? Jul 17, 2025 am 04:12 AM

はい、特に患者向けに、炎症を起こす可能性があります

静的対セルフ:PHPの後期静的バインディングの解明 静的対セルフ:PHPの後期静的バインディングの解明 Jul 26, 2025 am 09:50 AM

継承で自己を使用して静的メソッドが呼び出されると、実際に呼ばれるクラスではなく、メソッドを定義するクラスを常に指しているため、予想どおりにサブクラスオーバーライドメソッドを呼び出すことができません。一方、静的は後期静的結合を使用しますが、これは実行時に実際に呼ばれるクラスに正しく解析できます。 1。自己は、コードが配置されているクラスを指して、初期の拘束力があります。 2。静的は、ランタイムの呼び出しクラスを指して、遅いバインディングです。 3.静的を使用して静的工場メソッドを実装し、自動的にサブクラスインスタンスを返します。 4.静的は、メソッドチェーン内の継承された属性の正しい解像度をサポートします。 5。LSBは、定数ではなく静的な方法と属性にのみ適しています。 6。柔軟性とスケーラビリティを向上させるために、継承可能クラスで最初に静的を使用する必要があります。

PHPの三元、ヌルの合体、およびヌルサフェのオペレーターを分類します PHPの三元、ヌルの合体、およびヌルサフェのオペレーターを分類します Jul 25, 2025 pm 04:48 PM

theternaryoperator(?:) isusedforsimpleif-elselogic、returningoneoftovaluesbasedonacontition;

PHPでのバリアード機能と引数の理解を理解する PHPでのバリアード機能と引数の理解を理解する Jul 25, 2025 am 04:50 AM

PHPの変数関数とパラメーターの開梱は、SPLAT演算子(...)を介して実装されます。 1.変数関数は使用します... $パラメータとして複数のパラメーターを収集するためのパラメーターは、パラメーターリストの最後であり、必要なパラメーターと共存する必要があります。 2。パラメーターの[使用]の使用... $配列を独立したパラメーターに拡張し、数値インデックスアレイに適した関数に渡す。 3。ラッパー関数にパラメーターを渡すなど、2つは組み合わせて使用できます。 4。PHP8は、関連アレイを開梱するときに名前付きパラメーターのマッチングをサポートしており、キー名がパラメーター名と一致していることを確認する必要があります。 5.移動不可能なデータのために開梱を使用しないように注意してください。致命的なエラーを防ぎ、パラメーター量の制限に注意してください。これらの機能により、コードの柔軟性と読みやすさが向上し、func_get_args()などが減少します

近代的なPHPでの名前の名前の引数とコンストラクターのプロパティプロモーションを活用する 近代的なPHPでの名前の名前の引数とコンストラクターのプロパティプロモーションを活用する Jul 24, 2025 pm 10:28 PM

php8.0'snamedargumentsandconstructorpropertypromotionimprovecodecodecodecodeduceboilerplate:1。namedargumentslegumentsletyoupasparametersbyname、拡張性の低下flexibleordory;

PHP匿名関数対矢印関数:構文深いダイビング PHP匿名関数対矢印関数:構文深いダイビング Jul 25, 2025 pm 04:55 PM

矢印関数は、単一の式、シンプルなコールバック、読みやすさの向上を備えたシナリオに適しています。 2。匿名関数は、マルチラインロジック、複雑な制御フロー、外部変数を参照し、収量ジェネレーターを使用したシナリオに適しています。したがって、特定のニーズに応じて選択する必要があります。単純なシナリオは、コードの単純さを改善するために矢印関数を優先しますが、複雑なシナリオは匿名関数を使用して完全な機能サポートを取得します。

See all articles