三項演算子は名前の通り3つの項目がある演算子の総称で条件に応じてif文のような条件分岐ができます。if文と比べコンパクトに記述することができるメリットがあります。三項演算子をうまく利用することで可読性の高い簡潔なプログラムを記述できます。
三項演算子の使い方
三項演算子は以下のように記述します。
1 |
条件式 ? 真の場合に実行する値 : 偽の場合に実行する値 |
以下は変数xが100かどうかで変数msgに代入する文字列を変更するプログラムです。
1 2 3 4 5 |
<?php $x = 100; $msg = $x == 100 ? "xは100です" : "xは100ではないです"; print $msg; // xは100です |
これをif文に置き換えてみると以下のようになります。
1 2 3 4 5 6 7 8 9 |
<?php $x = 100; if ($x == 100) { $msg = "xは100です"; } else { $msg = "xは100ではないです"; } print $msg; // xは100です |
三項演算子を使用したほうが、if文よりプログラムを簡潔に記述できます。
評価結果には値だけでなく、式も実行可能
三項演算子の値には、式や関数を記述することも可能です。
1 2 3 |
<?php $x = 100; $x == 100 ? print "xは100です" : print "xは100ではないです"; |
1 2 3 4 5 6 |
<?php function func1() { print "xは100です"; } function func2() { print "xは100ではないです"; } $x = 100; $x == 100 ? func1() : func2(); |
PHPの三項演算子使うときの注意点
以下のプログラムは三項演算子をネストして記述した例です。
1 2 3 4 5 |
<?php $x = 100; $msg = $x == 100 ? "xは100です" : $x == 101 ? "xは101です" : "xは100でも101でもないです"; print $msg; |
このときの期待値は「xは100です」と表示されることですが、実際には「xは101です」と表示されてしまいます。これはPHPでは左から右へ順に式が評価されるからです。PHPで三項演算子をネストして使用するときは評価順序に注意が必要です。