【ITニュース解説】PHP三項演算子
2025年09月17日に「Qiita」が公開したITニュース「PHP三項演算子」について初心者にもわかりやすく解説しています。
ITニュース概要
PHPの三項演算子は、条件に応じて処理を分ける記法だ。「条件式 ? 式1 : 式2」と書き、条件が真なら式1、偽なら式2を実行する。これは「if-else」文をより簡潔に記述できるため、コードの可読性を高め、効率的なプログラミングに役立つ。
ITニュース解説
プログラミングでは、特定の条件に基づいて処理を分岐させる場面が頻繁に発生する。例えば、ユーザーの年齢が二十歳以上ならば「成人」と表示し、そうでなければ「未成年」と表示するといった具合だ。このような条件分岐を実現する構文の一つに「三項演算子」がある。PHPにおいても三項演算子は非常に強力で、コードを簡潔に記述するために広く利用されている。システムエンジニアを目指す上で、この三項演算子の理解は基礎となる。
三項演算子の基本的な書式は、「条件式 ? 式1 : 式2 ;」という形をとる。この書式は三つの部分から構成されているため「三項」という名前が付けられている。 まず「条件式」は、真(true)か偽(false)のいずれかの結果を返す式である。例えば「$num % 2 == 0」のような式がこれに該当する。ここで使われている「%」はモジュロ演算子(剰余演算子)といい、左側の数値を右側の数値で割った余りを求める。したがって「$num % 2 == 0」は、「$num」という変数の値を2で割った余りが0と等しいか、つまり「$num」が偶数であるかを判定する条件式となる。この条件式が真であれば、偶数であると判断され、偽であれば奇数であると判断される。 次に「?」は、条件式とその後の処理を区切る記号だ。これは「条件式が真の場合には何をするのか」を示す部分の始まりを意味する。 そして「式1」は、条件式が真と評価された場合に実行される処理や、その結果として返される値を記述する部分である。 「:」は、真の場合の処理と偽の場合の処理を区切る記号で、「そうでなければ」という意味合いを持つ。 最後に「式2」は、条件式が偽と評価された場合に実行される処理や、その結果として返される値を記述する部分だ。 これらの要素が組み合わさることで、一つの条件式の結果によって二つの異なる処理や値のどちらかを選択し、実行できる。文の最後には他の多くの文と同様にセミコロン「;」を付けて終了する。
この三項演算子の動作は、プログラミングにおける基本的な条件分岐文である「if-else」文と全く同じ働きをする。「if(条件式) then 式1 else 式2」という形と等価であると考えることができる。
具体的な例を挙げて理解を深めよう。もし変数の$numに2という値が格納されているとする。この場合、「$num % 2 == 0」という条件式は「2 % 2 == 0」となり、2を2で割った余りは0であるため、この条件式は真(true)と評価される。三項演算子では、この条件式が真であった場合、「?」の直後に続く「式1」が実行される。
仮に、$val = $num % 2 == 0 ? '偶数' : '奇数'; という三項演算子があった場合、条件式「$num % 2 == 0」が真なので、「'偶数'」という文字列が$valに代入される。もし$numが3であったならば、条件式「3 % 2 == 0」は偽(false)となるため、「:」の後に続く「式2」である「'奇数'」という文字列が$valに代入されることになる。
三項演算子をif-else文と比較すると、その利点がより明確になる。一般的なif-else文で先ほどの例を記述すると、以下のようになる。
1if ($num % 2 == 0) { 2 $val = '偶数'; 3} else { 4 $val = '奇数'; 5}
このif-else文は複数行にわたる記述が必要だが、三項演算子を使えば$val = $num % 2 == 0 ? '偶数' : '奇数'; とわずか一行で同じ処理を表現できる。この簡潔さが三項演算子の最大の魅力であり、特に変数への値の代入や、関数への引数として値を渡す場合など、短い処理の分岐においてコードの可読性を高め、記述量を削減するのに役立つ。
ただし、三項演算子は常に最適な選択肢であるわけではない。複雑な条件式を記述したり、式1や式2の部分に長い処理や複数の処理を記述したりすると、かえってコードが読みにくくなる可能性がある。可読性が低下すると、後からコードを見直したり、他の開発者が理解したりする際に問題が生じる。プログラミングにおいて、コードの簡潔さは重要だが、それ以上に保守性や可読性が大切であることを忘れてはならない。
したがって、三項演算子を利用する際は、その適用範囲を慎重に検討する必要がある。例えば、条件分岐によって代入する値が明確で短文で表現できる場合や、関数呼び出しの引数を条件によって切り替える場合など、限定的な状況で効果を発揮する。しかし、複数の条件分岐が必要な場合(例えば「もし〜ならA、そうでなくもし〜ならB、そうでなければC」といったケース)には、if-else if-else文やswitch文を使用する方が、コードの意図が明確になり、理解しやすくなるだろう。また、三項演算子の中にさらに三項演算子を記述する、いわゆる「ネスト」された形は、極めて読みにくくなるため、避けるべきだ。
まとめると、PHPの三項演算子は、条件に基づいて二つのうちいずれかの処理や値を簡潔に選択できる便利な構文である。if-else文と同じ機能を持つが、一行で記述できるため、特に短い条件分岐で活用することでコードをより洗練させられる。しかし、その簡潔さが故に、誤った使い方をするとかえってコードの複雑性を増してしまうため、常に可読性と保守性を意識して利用することが、優れたシステムエンジニアへの第一歩となる。