この記事の要点
- 三項演算子は複数行に渡る分岐処理を一行にまとめて記述できる
- 三項演算子は「エルビス演算子」「NULL合体演算子」で省略したり、複数をネストして使うこともできる
- 三項演算子をネストしすぎると意図しない判定になったり読みにくくなるので注意
以前、PHPはどのような言語なのか、学習に利用したいおすすめサービスなど、PHPの基礎についてご紹介していました。
PHPで使いこなしたい書き方のひとつとして「三項演算子」があります。
PHPの三項演算子を利用すれば、複数行に渡る複雑な処理を一行にまとめて記述することができて大変便利です。
また、三項演算子は「エルビス演算子」「NULL合体演算子」で省略して記述できるほか、複数をネストして使うこともできます。
PHPで三項演算子を使いこなし、すっきりしたコーディングを実現しましょう。
目次
三項演算子とは
三項演算子とは、1つの処理を3つの項目で記述することによって分岐処理を行う演算子です。
三項演算子を使用すれば、if文による分岐処理を一行でスッキリ記述することができます。
基本的な構文
三項演算子の基本構文は、以下のようになっています。
式1の評価結果がtrueなら式2、式1の評価結果がfalseなら式3を返すのが基本です。
条件式にはtrue/falseの真偽値で評価できる比較演算子などを使用して記述します。
if-else構文で記述することもできますが、複数の分岐になる場合には利用できないので注意が必要です。
三項演算子の使用例
実際に三項演算子を使用した例を見てみましょう。
例:
<?php //本日の月日を取得 $today = "10/31"; $event = $today == "10/31" ? "ハロウィンです" : "ハロウィンではありません"; echo "今日は".$event; ?>
実行結果:
今日はハロウィンです
上記の三項演算子は、if-else構文で書き換えることができます。
その場合、以下のようになります。
<?php if ($today == "10/31") { $event = "ハロウィン"; } else { $event = "ハロウィンです"; } ?>
if-else構文では4行に渡って記述する必要があるのに対して、三項演算子は一行で記述することができます。
このように三項演算子を使えば、if-else構文を簡略化できるのです。
エルビス演算子
PHPの三項演算子は、エルビス演算子で省略して記述することが可能です。
エルビス演算子はPHP5.3以降で使用できるようになりました。
エルビス演算子とはプログラミング用語の1つで、「?:」を使用した二項演算子のことを指します。
基本的な構文
エルビス演算子の基本構文は以下のようになっています。
エルビス演算子「?:」の前にある式の評価結果がtrueであれば式の評価結果を、falseであれば「?:」の後ろの式の結果が返されます。
「?」と「:」の間に空白などを入れない点に注意してください。
なおこれは通常の三項演算子に書き換えると、以下のように記述することができます。
(式1)は1回のみ評価されます。
なお、PHP公式マニュアルには「エルビス演算子」とは書かれておらず、三項演算子の中で以下のような説明文が記載されているのみです。
三項演算子のまんなかの部分をなくすこともできます。 式 expr1 ?: expr3 の結果は、expr1 が true と同等の場合は expr1、 それ以外の場合は expr3 となります。 この場合、expr1 は一度だけ評価されます。
PHPマニュアルより引用
エルビス演算子の使用例
エルビス演算子を使用した例をご紹介します。
例:
<?php $today = "10/31"; $halloween = $today == "10/31" ?: "10/31以外"; echo "今日は".$halloween; ?>
実行結果:
今日は1
この場合、条件式の結果がtrueのため、エルビス演算子の結果は「true」です。
PHPではtrueは文字列で「1」と解釈されるので、実行結果のような値が表示されます。
上の例をif-else構文で書き換えると、以下のようになります。
<?php if ($today == "10/31") { $today = "10/31"; } else { $today = "10/31以外"; } ?>
null合体演算子
PHPの三項演算子は、null合体演算子で省略して記述できる場合があります。
null合体演算子はPHP7以降で使用できるようになった機能です。
null合体演算子「??」の前にある式がNULLでなければ式の評価結果を、NULLであれば「??」の後ろの式の結果が返されます。
PHP 5.Xのようなバージョンが古い環境では使用できないので注意してください。
基本的な構文
null合体演算子の基本構文は、以下のようになっています。
なおこれは通常の三項演算子に書き換えると、以下のように記述することができます。
null合体演算子では、式1の値が存在しない場合であってもnoticeやwarningが発生せず、isset()と同じ挙動になります。
配列のキーの値が存在しない場合などに使用すると便利です。
null合体演算子の使用例
null合体演算子を使用した例をご紹介します。
例:
<?php $today = "10/31"; $value = $today ?? "null"; echo "todayの値は".$value."です"; ?>
実行結果:
todayの値は10/31です
この場合、$todayの値はNULLではないため、そのままの値「10/31」が返されています。
もし「$today = null;」であった場合、実行結果は「todayの値はnullです」と表示されます。
上の例をif-else構文で書き換えると、以下のようになります。
<?php $today = "10/31"; if (isset($today)) { $value = $today; } else { $value = "null"; } ?>
複数の三項演算子をネストして使うことも可能
複数の三項演算子をネストして使うこともできます。
この使い方をすれば、if-elseif-else構文もコンパクトに記述できるため、慣れると大変便利です。
ただし、三項演算子を使いすぎるとコードが読みにくくなってしまうので、ネストする際には注意しましょう。
複数の三項演算子をネストする使用例
複数の三項演算子をネストする使用例をご紹介します。
例:
<?php $today = "10/31"; $event = $today == "10/31" ? "ハロウィン" : ($today == "12/25" ? "クリスマス" : "ハロウィンでもクリスマスでもない日"); echo "今日は".$event; ?>
実行結果:
今日はハロウィン
1つの文に複数の三項演算子をネストして使用する場合、括弧を付けて結合を明示する必要があります。
PHP7までは括弧無しでも記述できましたが、PHP8ではエラーになるので注意しましょう。
$eventには、$todayが「10/31」であれば「ハロウィン」、「12/25」であれば「クリスマス」、それ以外の場合は「ハロウィンでもクリスマスでもない日」の値が入ります。
これをif-elseif-else構文に書き換えると、以下のようになります。
<?php if ($today == "10/31") { $event = "ハロウィン"; } else if ($today == "12/25") { $event = "クリスマス"; } else { $event = "ハロウィンでもクリスマスでもない日"; } ?>
if-elseif-else構文が7行に渡っているのに対し、三項演算子であれば一行で収まるため、コードが大変シンプルになります。
一方で、両者を比べてみると、if-elseif-else構文のコードの方が分かりやすい・読みやすいと感じる人もいるかもしれません。
コードをシンプルに書くことと、読みやすいコードを書くことは、必ずしも一致しません。
自分本位にならず、第三者から見てどちらのほうが読みやすいコードかを適宜判断して記述することが大切です。
ネストしすぎに注意!
PHPマニュアルには、三項演算子のネストに関して以下のように注意書きが記載されています。
三項演算子を"積み重ねて"使用することは避けましょう。ひとつの文の中で括弧で囲わずに複数の三項演算子を使用した際のPHPの振る舞いは、他のプログラミング言語のそれと比べて、少々わかりにくいものです。
PHPマニュアルより引用
PHPの演算子には結合性があるため、三項演算子を正しく使わなければ、意図しない結果になる場合があります。
また、三項演算子をネストしすぎてしまうとコードが読みにくくなってしまうため、多用しすぎてはいけません。
必要に応じてif文と使い分けて、分かりやすいコーディングを心がけましょう。
読みやすいコードを書くコツとは?
システム開発の現場では、1つのプロジェクトで複数のエンジニアが同時に開発を行っています。
そのため、コーディングにおいても「自分以外の誰か」の存在を意識して作業することが重要です。
三項演算子はコーディング行を節約できて便利な反面、ネストを濫用しすぎると複雑で読みにくいコードが出来てしまいます。
必要に応じてif文を使い、コメントで処理の内容の説明を入れるなど、第三者がコードを読むことを前提にコーディングを行いましょう。
三項演算子でコードが複雑になってしまうのであれば、分解できるところは分解し、適度に使い分けるセンスが大切です。
まとめ
PHPの三項演算子の基本的な使い方のほか、省略した書き方や複数をネストした使い方をご説明しました。
三項演算子は複数行に渡る処理を一行にまとめられるので、使い方次第でとても読みやすいコードを書くことができます。
ネストのし過ぎに注意しつつ、必要に応じて三項演算子を使いこなしましょう。
また、PHP初心者におすすめなものとして、人気No.1のフレームワークである「Laravel(ララベル)」があります。
機能性や将来性が非常に高く学習しやすいのが特徴のフレームワークです。
Laravelの入門編として、使い方と学び方を詳しくご紹介しています。
そして、PHPを学習し、副業や転職に有利になる資格はないか気になっている方にご紹介したいのが「php技術者認定試験」です。
php技術者認定試験は、PHPのスキルを認定する唯一の資格試験で、PHPスキルを把握できるだけでなく、就職や転職の役に立ちますので3個にしてください。