PHPで使用する三項演算子とは?【基礎知識】書き方から注意点まで詳しく解説

PHPでプログラミングを行う人にとって、三項演算子はコードの可読性や効率に大きく影響する存在といえます。
これは条件分岐を短く書ける便利な構文なのですが、知らないうちにエラーや可読性の低下を招く可能性もあるでしょう。
本記事では三項演算子の基礎と応用をサンプルコードとともに紹介します。またエルビス演算子やNull合体演算子も登場し、処理をシンプルにまとめるコツを学ぶことも可能になるでしょう。
知らないまま使うと危険な落とし穴もあるため、注意点も意識しつつチェックしてほしいと思います。
PHPで使用する三項演算子とは?
PHPで使用する三項演算子は
条件 ? 真の場合 : 偽の場合
のように書きます。
もし条件式が当てはまれば真の部分が実行され、そうでなければ偽の部分が実行されます。
読み方としては「もし条件式が真ならば〇〇、そうでなければ△△」というイメージでしょう。
if文と比べるとコードが短くまとまるため、場合によっては僅かに高速になることもあります。
ただし読みやすさを損ねる可能性もあるため、どちらを使うかは状況や好みによって判断するのが大切でしょう。
以下の記事では、PHPの練習ができるサイトを紹介しています。三項演算子を試すときにも使えるので、ぜひ参考にしてください。
三項演算子の基本の使い方・書き方
この章では、三項演算子の基本的な使い方・および書き方について、サンプルコードを含めてご紹介します。
サンプルコード①
以下は、$scoreが60以上のときは「合格」と表示し、そうでないときは「不合格」と表示する例を、三項演算子で書いています。
<?php
$score = 80;
$result = ($score >= 60) ? "合格" : "不合格";
echo "結果: " . $result;
?>
実行結果:
合格
$scoreの値は80、60以上なので、合格となります。
サンプルコード②
以下は$ageが20未満なら「未成年」と判定し、20以上なら「成人」と判定する内容です。
<?php
$age = 18;
$category = ($age < 20) ? "未成年" : "成人";
echo "あなたは " . $category . " です";
?>
実行結果:
あなたは 未成年 です
$ageは18なので、実行結果は「未成年」となりました。
三項演算子を使う際の注意点
この章では、三項演算子を使う際の注意点として、以下の項目を解説していきます。
- echoを記述することで起きるエラー
- ネストすることで起きる問題
- 速度だけでなく可読性も意識する必要がある
echoを記述することで起きるエラー
三項演算子を使うときに、気をつけなければならないのが「echo」を組み合わせる場合です。
三項演算子は条件式の結果を返すため、式全体が「値」として処理されますが、echoは出力専用の命令であり、返り値を持たないためエラーになります。
間違った例は以下のとおりです。
<?php
$value1 = 10;
$value2 = 20;
// エラーになる例
$result = $value1 < $value2 ? echo 'value1が小さい' : echo 'value2が小さい';
?>
実行結果:
PHP Parse error: syntax error, unexpected 'echo'
このエラーは、echoが返り値を持たないために発生します。三項演算子は「値」を返す仕組みなのに、echo自体は何も返せないためです。
一方、以下は正しい書き方です。
<?php
$value1 = 10;
$value2 = 20;
$result = $value1 < $value2 ? 'value1が小さい' : 'value2が小さい';
echo $result;
?>
実行結果:
value1が小さい
上記は三項演算子の結果を変数に代入し、それをechoで出力する方法です。
echoを使いたい場合は、三項演算子の中で直接使用せず、printに変更するか、変数に代入してからechoする方法を取りましょう。
無理にechoを組み込むとエラーになるだけでなく、コードの可読性も下がるので、できるだけシンプルな形で使うように心がけると良いでしょう。
>>DMM WEBCAMP PHP/Laravelコースの詳細はこちら
ネストすることで起きる問題
三項演算子を多重にネストすると、処理の流れが分かりにくくなり、可読性を損ねることがあります。
括弧の付け忘れなどでエラーを引き起こす可能性もあるため、ネストはなるべく必要最小限に留めるほうがよいでしょう。
<?php
// ネストが深くて読みにくい例
$score = 70;
$result = ($score >= 80)
? “A”
: (($score >= 60)
? “B”
: “C”);
echo “成績: ” . $result;
?>
実行結果:
成績: B
上記のコードは実行こそできますが、ネストが深いため、一見しただけでは条件の判定基準が分かりづらいでしょう。
三項演算のネストはアリ?ナシ?
ネスト自体が完全に悪いわけではありませんが、可読性を大きく損なう恐れがあります。
以下のような工夫をすると良いでしょう。
- どうしても複雑になる場合は、if文を使って可読性を優先する
- 条件ごとに変数へ代入するなど、段階的に分けて書く
- 括弧を増やすなどして、分岐の境界を明確にする
三項演算子はあくまでコードを短くするための手段なので、読み手に負担をかける書き方は避けるほうが望ましいです。
速度だけでなく可読性も意識する必要がある
三項演算子は、if文よりもわずかに高速になる場合がありますが、速度差はそれほど大きくないとされています。
高トラフィックな場面で小さな積み重ねが重要になるケースもありますが、多くの場合は可読性を重視するほうがトラブルを防げるでしょう。
処理速度と同じくらい、コードを保守しやすくするための見やすさを意識することが重要といえます。
【応用編】エルビス演算子・Null合体演算子
三項演算子には、便利な応用テクニックも存在します。
その中でもエルビス演算子やNull合体演算子は、値が設定されていない場合の処理を簡潔に書ける方法として知られています。
ここでは、それぞれの特徴や使い方をサンプルコードとともに紹介します。
検査関数(isset)を使った値の確認方法
PHPで変数が存在するかどうかを確認する際に使われるのが、検査関数isset()です。
この関数は、変数が定義されていてnull以外の値を持つ場合にtrueを返し、そうでない場合はfalseを返します。
変数がセットされていない場合のエラーを防ぐために役立つ関数です。
サンプルコードと実行結果
<?php
$name = “山田”;
// issetで変数が存在するか確認する
if (isset($name)) {
echo “名前は ” . $name . ” です。”;
} else {
echo “名前は設定されていません。”;
}
?>
実行結果:
名前は 山田 です。
この例では、変数$nameがセットされているので、正常に名前を出力できます。
もし$nameを定義しなければ「名前は設定されていません。」と表示されるでしょう。