本記事ではPHPの三項演算子について解説します。
三項演算子を使えると、ソースコードの行数を大幅に減らすことが可能です。
必須というわけではありませんが、非常に便利な機能なので覚えておきましょう。
PHPの三項演算子とは?
三項演算子はPHPに最初から備わっている機能の1つで、if文の代わりに条件分岐処理を書くことが可能です。
三項演算子は次のような形式で書くのが基本です。
【条件式】? 【正の処理】 : 【偽の処理】
最初に条件式を書き「?」を挟んで、条件式が正しい場合の処理内容と正しくない場合の処理内容を書きます。
なお、if文がよく分からないという方はPHP基礎編4:条件分岐処理の「if文」を覚えるだけでプログラミングの幅が広がる、を参考にしてください。
三項演算子を使うメリット
三項演算子を使うことで、条件分岐処理を一行で書くことが可能です。
状況に応じて上手く使うことで、ソースコードの可読性に繋がるのがメリットです。
可読性を高めることで、Webサービスに不具合が生じた際もどこが原因なのか素早く突き止めることができます。
ただし、三項演算子を使う場面を間違えると、却って読みにくくなってしまうこともあるため、使い所には気をつける必要があります。
PHPの三項演算子の使い方
PHPの三項演算子の使い方について解説します。
以下の2つの手順に従って説明していきましょう。
- if文を三項演算子にする
- else if文を三項演算子にする
1)if文を三項演算子にする
まず、if文を三項演算子にする方法についてみていきましょう。
if文は次のように書くのが一般的です。
○コード例
<?php
$num = 1;
if($num == 1){
echo "1です";
}
else{
echo "1ではありません";
}
?>
○実行結果
上記では変数$numに格納された数値が「1」なら「1です」と表示し、それ以外なら「1ではありません」と表示する簡単な条件分岐の例です。
では、これを三項演算子で書くとどうなるでしょう?
○コード例
<?php
$num = 1;
echo $num == 1 ? "1です" : "1ではありません";
?>
○実行結果
三項演算子で書くと以上のようになります。
「$num == 1」という条件式をまず書き「?」を挟んで左辺の条件式に一致した場合の処理内容、右辺に一致しなかった場合の処理内容を書いています。
この場合でも実行結果は同じになります。
このように三項演算子を使うとたった一行で条件分岐を書くことが可能です。
2)else if文を三項演算子にする
続いて、else if文を三項演算子にする方法について解説します。
まず、else if文を普通に書くとこうなります。
○コード例
<?php
$num = 2;
if($num > 1){
echo "1より大きいです";
}
else if($num < 1){
echo "1より小さいです";
}
else{
echo "1です";
}
?>
○実行結果
上記では$numが1より大きい場合、小さい場合、それ以外(等しい場合)の3つに条件分岐させ、それぞれ別の出力をさせています。
このような文を三項演算子を使って書くと次のようになります。
○コード例
<?php
$num = 2;
echo $num > 1 ? "1より大きいです" : ($num < 1 ? "1より小さいです" : "1です");
?>
○実行結果
条件分岐が3つ以上ある場合、三項演算子をネストさせることになります。
三項演算子の右辺を括弧で囲い、その中にもう1つ三項演算子を書いています。
見て分かる通り3つ以上の条件分岐を三項演算子で書くと、見にくくなってしまいます。
三項演算子は分岐が2つのときのみ使った方が良いと言えます。
なお、条件分岐が多い場合は、以下のようにswitch文を使う手もあります。
○コード例
<?php
$num = 2;
switch($num){
case $num > 1:
echo "1より大きいです";
break;
case $num < 1:
echo "1より小さいです";
break;
default:
echo "1です";
}
?>
○実行結果
switch文なら、条件分岐が多くなっても読みやすく書くことが可能です。
ただしswitch文はその分、行数が多くなってしまうデメリットがあります。
状況に併せて、if文、switch文、三項演算子を使い分けることが重要です。
三項演算子と似たPHPの機能について
PHPには三項演算子以外にも◯◯演算子といった機能があります。
その中でも三項演算子とよく似ているのが次の2つです。
- Null合体演算子
- エルビス演算子
これら2つも使いこなせるようになると、複雑なコードも分かりやすく書けるようになります。
これら2つの使い方について詳しく解説していきます。
1)Null合体演算子
Null合体演算子は変数に値が格納されているかをチェックする際に便利な演算子です。
○コード例
<?php
$num = 1;
echo $num ?? "数値が入力されていません";
?>
○実行結果
上記のコードでは、$numに値が格納されているかどうかチェックしています。
$numに値が格納されている場合、上記のように格納されている値が出力されます。
○コード例
<?php
echo $num ?? "数値が入力されていません";
?>
○実行結果
上記では$numには何も入っていません。
何も入っていない場合、Null合体演算子の右辺の処理が実行されます。
上記でも右辺の処理が実行され「数値が入力されていません」と表示されています。
2)エルビス演算子
エルビス演算子は条件式に合致しているなら、条件式の結果を返却する演算子です。
例をみていきましょう。
○コード例
<?php
$num = 2;
echo $num == 1 ?: "1ではありません";
?>
○実行結果
上記のコードでは$numには「2」が格納されているため、条件式には合致していません。
そのため、エルビス演算子の右辺の処理が行われています。
○コード例
<?php
$num = 1;
echo $num == 1 ?: "1ではありません";
?>
○実行結果
上記では条件式に合致しているため、条件式の結果がそのまま表示されています。
まとめ
本記事ではPHPの三項演算子について解説しました。
三項演算子を使うとif文を短く書くことが可能です。
ただし、条件分岐が多い場合に三項演算子を使うと、むしろ分かりにくくなってしまうので、注意してください。
条件分岐が多い場合はswitch文を使うことも視野に入れることが重要です。