Null Coalescing Operator
CoddyのPHPジャーニー「基礎」セクションの一部。レッスン 31/71。
null合体演算子 (??) は、variable が null であるか存在しない場合に、default 値を使用する便利な方法を提供します。これは、欠落している可能性のあるデータを扱う際に特に便利です。
構文では、チェックする変数とフォールバック値の間に ?? を配置します:
<?php
$username = null;
$displayName = $username ?? "Guest";
echo $displayName; // Guest
?>PHPは $username が null かどうかをチェックします。null であるため、演算子は代わりに "Guest" を返します。$username に値があった場合は、その値が使用されます。
<?php
$username = "Alice";
$displayName = $username ?? "Guest";
echo $displayName; // Alice
?>Null合体演算子は、変数が一切定義されていない場合でも、エラーを発生させることなく動作します:
<?php
// $color はどこにも定義されていません
$selectedColor = $color ?? "blue";
echo $selectedColor; // blue
?>これにより、isset() チェックを伴う三項演算子を使用するよりも ?? の方がすっきりと書けるようになります。データが存在しない可能性がある場合に、適切なデフォルト値を提供するのに最適です。
チャレンジ
簡単入力から2つの値(文字列の nickname と文字列の theme)を読み込みます。
Null合体演算子を使用して、欠落している可能性のある値を処理します:
nullに設定された変数$userNicknameを作成します。次に、Null合体演算子を使用して、$userNicknameが存在しnullでない場合はその値を、そうでない場合はnicknameの入力値を$displayNicknameに代入します。- 変数
$userThemeを作成し、themeの入力値を代入します。Null合体演算子を使用して、$userThemeが存在しnullでない場合はその値を、そうでない場合はデフォルトとしてdarkを$selectedThemeに代入します。 - 未定義の変数
$language(定義しないでください)に対して直接Null合体演算子を使用し、$languageが存在する場合はその値を、そうでない場合はデフォルトとしてEnglishを$displayLanguageに代入します。
各結果をこの順序($displayNickname、$selectedTheme、$displayLanguage)で改行区切りで出力します。
例:
入力が Player1 と light の場合、出力は次のようになります:
Player1
light
English入力が GuestUser と blue の場合、出力は次のようになります:
GuestUser
blue
English自分で試してみよう
<?php
// 入力を読み取る
$nickname = trim(fgets(STDIN));
$theme = trim(fgets(STDIN));
// TODO: 以下にコードを書いてください
// 1. $userNickname を null に設定して作成し、?? を使って $displayNickname に代入する
// 2. テーマ入力で $userTheme を作成し、?? を使って $selectedTheme に代入する(デフォルト: 指示の正確なテキスト)
// 3. 未定義の $language に ?? を使って $displayLanguage に代入する(デフォルト: 指示の正確なテキスト)
// 結果を出力する(それぞれ新しい行に)
echo $displayNickname . "\n";
echo $selectedTheme . "\n";
echo $displayLanguage . "\n";
?>このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
4Comparison & Logical Operators
Comparison OperatorsEquality & IdentityLogical Operators Part 1Logical Operators Part 2Recap - Simple Logic2Variables and Data Types
NumbersStrings and QuotesBooleansNaming ConventionsRecap - Variable InitEmpty VariablesString ConcatenationGetting User InputCast to Different Types5Conditional Logic
If StatementIf - ElseThe Ternary OperatorNull Coalescing OperatorSwitch StatementRecap - Making Decisions3Basic Operators
Arithmetic OperatorsModulo OperatorExponentiation OperatorCombined AssignmentIncrement/DecrementOperator PrecedenceRecap - Simple CalculationsString Operators自分で練習してみよう: PHPオンラインコンパイラ