PHPの三項演算子とnull合体演算子の使い方

PHPの便利な条件演算子、三項演算子とnull合体演算子の使い方の備忘録です。
三項演算子とは
三項演算子は、1つの演算子処理で3つの式を使用する特殊な演算子です。
「条件式 ? 真の式 : 偽の式」の形式で記述され、条件式の真偽に応じてTRUEの場合は真の式を返し、FALSEの場合は偽の式を返します。
処理が似ているため、if文の省略形や代替手段として利用されます。
三項演算子の使い方
三項演算子を使用した条件分岐のサンプルコードです。
$bool ? func1() : func2();
左から順に、条件$bool
に続いて「?(疑問符)」、そして条件が真値であった場合に実行するfunc1()
、「:(コロン)」が続き、条件が偽値であった場合に実行するfunc2()
を記述します。
以下のコードでは、2つの変数$a
と$b
を比較して値の大きい方を実行結果として返します。
$a > $b ? $a : $b;
三項演算子の代入
三項演算子の結果は変数に代入することもできます。
$ans = $bool ? func1() : func2();
echo $ans;
$bool
の真偽に応じてfunc1()
、またはfunc2()
の実行結果が$ans
に代入されます。
例えば、以下のコードでは2つの変数を比較して大きい方を結果に代入して表示します。
$ans = $a > $b ? $a : $b;
echo $ans;
「$a = 1」、「$b = 3」の時、実行結果として「3」が表示されます。
上記と同じコードをif文で記述すると以下のようになります。
if($a > $b){
$ans = $a;
}else{
$ans = $b;
}
echo $ans;
if文も条件の真偽に応じて処理を分岐していますが、三項演算子を使用したコードの方がすっきりと短縮されていることがわかります。
三項演算子の省略
三項演算子は条件式と真の式が同等の時に、「条件式(真の式) ?: 偽の式」の形にを省略することができます。
例えば、以下のコードのように条件式と真の式が同じ場合は、省略が可能です。
$ans = $bool ? $bool : 'null';
条件式と真の式$bool
を一つにまとめ、後ろに「?(疑問符)」「:(コロン)」を付けて偽の式を記述します。
$ans = $bool ?: 'null';
上記のサンプルでは、$bool
に値が入っていた場合はそのままその値が返され、値のない場合は「null」が返されます。
条件式に代入できない形の演算式などを設定している場合、真の値は「1」が返されます。
$ans = $a < $b ?: 'aはbより大きい値';
$a
が$b
の値よりも小さい時は、「1」が$ans
に代入されます。
このように単純な条件式による分岐であれば、三項演算子を使ったコードが効率的です。一方で、複雑な条件分岐には向いておらず多用すると可読性が下がってしまうデメリットもあります。
Null合体演算子
三項演算子で変数がNULLかどうかを条件にしたい場合は、Null合体演算子を使用します。
「条件式(または$変数) ?? 真の式」の形式で記述され、条件式がNULLの場合に真の式を実行します。
$name = null;
$ans = $name ?? 'No Name!';
echo $ans;
上記のサンプルでは、変数$name
がNULLなので「No Name!」が返されます。
変数に値が入っている場合は、三項演算子と同様に条件式の変数の値がそのまま返されます。
三項演算子にisset()
を使用して変数がNULLかどうかを確認することはできますが、ネストするとコードが見にくくなるなどデメリットもあるのでNull合体演算子の使用がおすすめです。