ソースコードは、できるだけ簡潔に、わかりやすく書きたいですよね。これを実現する手法の1つとして、PHPの三項演算子があります。
三項演算子を上手く使うことで、長いコードを省略でき、読みやすいコードを書けるようになります。しかし、省略しすぎるとかえって読みにくい場合があるため、使う場面には注意しなければなりません。
この記事では、PHPの三項演算子の特徴や使い方、注意事項を詳しく解説していきます。PHPを使ってコードを書いている方や勉強中の方は必見の内容となっています。
ぜひ最後までご覧いただき、PHPの三項演算子の理解を深めてください。
目次
1.PHPの三項演算子とは?
PHPの三項演算子とは、1つの演算子処理で3つの式を使うための処理をさします。シンプルに記述できるため、可読性が高くなるのが主な特徴です。
基本構文は以下のとおりです。
条件 ? 真の値 : 偽の値; |
例えば、$xが10以上なら"OK"を、そうでなければ "NG" を返すコードは、通常if-elseを使うと次のようになります。
if ($x >= 10) { $result = "OK"; } else { $result = "NG"; } |
このコードを三項演算子を使うと以下のようになります。
$result = ($x >= 10) ? "OK" : "NG"; |
このような形で、コードを短縮できるため、条件分岐を記述する際に便利な機能です。ただし、if-else文を使う方がよい場面もあります。使う場面には気をつけましょう。
2.PHPの三項演算子を使う3つのメリット
PHPの三項演算子を使うことで主に以下3つのメリットを享受できます。
コードの簡潔化:if文を使わずに1行で条件分岐を記述可能。
処理速度の向上:シンプルな処理ならば可読性を損なわずに短縮できる。
メンテナンス性の向上:条件が簡単な場合、if文よりも直感的な記述が可能。
上手く活用できると、可読性が高いコードを書きやすくなります。具体的なコードの書き方は次の章で解説しますので、ぜひご覧ください。
関連記事
PHPでできること・できないことを解説!初心者でも作れるものや学習方法も紹介
3.PHPの三項演算子の使い方
PHPの三項演算子でよく使われる2つの使い方を解説します。
if-elseなしで記載する
issetを使用する
if-elseなしで記載する
三項演算子はif-elseの代わりとして使われるため、 明示的なifやelseを記述する必要がありません。例えば、以下のようなif-else文があります。
if ($age >= 18) { $status = "成人"; } else { $status = "未成年"; } |
このコードを三項演算子を使って書くとより短く表現できます。
$status = ($age >= 18) ? "成人" : "未成年"; |
もともと4行あったコードを1行にまとめられたため、行数が減り、可読性が上がりました。ただ、複雑な条件分岐では三項演算子を使わずに、if-else文を使う方がわかりやすくなる場合もあります。使うシーンに合わせて使い分けるのがおすすめです。
issetを使用する
PHPの三項演算子はisset関数と組み合わせることで、変数がセットされているかのチェックを簡単に記述できます。
基本的な書き方は以下のとおりです。
bool isset($変数名1 [, $変数名2 ...]) |
引数には一つもしくは複数の変数名を指定します。また、変数名を指定することで、その変数がセットされているかそうでないかを調べることも可能です。
返り値は、すべての変数に値がセットされている場合はTRUEを返し、設定されていない場合はFALSEを返します。
例として以下のコードは$_GET['name']がセットされている場合はその値を使用し、未定義の場合は "ゲスト" を代入します。
$name = isset($_GET['name']) ? $_GET['name'] : "ゲスト"; |
関連記事
PHPプログラミングとは?将来性や実践で活用できるコード例など初心者にわかりやすく解説
4.PHPのエルビス演算子で三項演算子の省略ができる
PHP5.3以降ではエルビス演算子を用いて三項演算子の中間値を省略できます。例えば以下の構文をエルビス演算子を使って省略してみます。
基本構文は以下のとおりです。
条件式(真の式) ?: 偽の式; |
具体的にコードを記載してみます。
$value = !empty($input) ? $input : "デフォルト値"; |
このコードをエルビス演算子で書くと以下のようになります。
$value = $input ?: "デフォルト値"; |
エルビス演算子は返り値がfalseやnullの場合にデフォルト値を適用するため、変数の初期化 やデフォルト値の設定に役立ちます。
5.PHPの三項演算子は返り値を持たないechoはエラーとなる
PHPの三項演算子は値を返す演算子ですが、echoのような返り値を持たない関数と直接組み合わせるとエラーが発生します。これは、三項演算子の仕様上、評価結果が値として処理される必要があるためです。
例えば、以下のコードはエラーになります。
echo true ? "OK" : "NG"; |
このコードは直感的に動きそうに見えますが、echo自体は値を返さないため、三項演算子の戻り値として適切ではありません。対処法としては、echoを三項演算子の外で使うか、明示的に括弧で囲む方法があります。
修正例は以下のとおりです。
echo (true ? "OK" : "NG"); // 正しく動作 |
もしくは以下の書き方もできます。
$result = true ? "OK" : "NG"; echo $result; |
6.phpのnull合体演算子(はてな2つ)とは?
null合体演算子(??)は、PHP7以降で導入された新しい演算子で、変数が未定義またはnullの場合にデフォルト値を返します。
Null合体演算子の基本構文は以下のとおりです。
条件式または$変数 ?? デフォルト値の式; |
実際にコードを書いてみます。まずはPHPの三項演算子を使って作成したコードです。
$name = isset($_GET['name']) ? $_GET['name'] : "ゲスト"; |
これをNULL合体演算子(??)を使うと以下のようになります。
$name = $_GET['name'] ?? "ゲスト"; |
例えば、$_GET['name']に0が入っている場合、??を使うと0がそのまま代入されますが、isset()を使わないエルビス演算子($value ?: "デフォルト値")では"デフォルト値"になってしまいます。用途に応じて使い分けるのがおすすめです。
7.PHPの三項演算子を上手く使う3つのコツ
三項演算子を使用する際には、以下のコツを意識しながら利用するのがおすすめです。
条件が複雑になりすぎないようにする:ネストが増えると可読性が低下するため、適切なバランスを考慮する。
適切なコメントを記述する:三項演算子を使用したコードは、簡潔すぎて意図が伝わりにくい場合がある。
条件の評価順を理解する:複数の条件を使う場合、括弧を適切に使用し、意図しない動作を防ぐ。
例えば、以下のコードは三項演算子を使って書きましたが、理解しづらくなってしまっています。
$discount = ($member && $purchase >= 10000) ? 20 : ($member ? 10 : 0); |
この場合は、以下のようにif文を用いる方が読みやすくなります。
if ($member) { $discount = ($purchase >= 10000) ? 20 : 10; } else { $discount = 0; } |
やみくもに三項演算子を使うのではなく、利用シーンによって使い分けるようにしましょう。
関連記事
PHP配列完全ガイド|初期化・追加・要素数・操作から配列操作・連想配列まで徹底解説
8.PHPの三項演算子でよくある質問
PHPの三項演算子を使う上でよくある質問として以下の2つを解説します。
trueのみの場合は?
複数条件の場合は?
trueのみの場合は?
三項演算子はの基本構文は以下のとおりです。
条件 ? 真の値 : 偽の値 |
そのため、true のみを指定した場合は、必ず「:」を使って「偽の値」も明示する必要があります。
例えば、以下のコードでは「:」を省略しているため、エラーが発生します。
$result = true ? "OK"; |
三項演算子は 常に「真の値」と「偽の値」の両方を指定しなければならないため、以下のように書かなければなりません。
$result = true ? "OK" : "NG"; |
また、「true の場合だけ値を設定したい」のであれば、三項演算子ではなくif文を使うのが適切です。エルビス演算子(?:)は「値が存在し真と評価される場合はその値を、そうでない場合はデフォルト値を使う」場合に適しています。
複数条件の場合は?
三項演算子は単純な条件分岐を簡潔に記述できますが、複数の条件を扱う場合には書き方に注意が必要です。
例えば、以下の条件を考えます。
$x が 10 より大きい場合は "大"
$x が 5 以上 10 以下なら "中"
$x が 5 未満なら "小"
このような条件を三項演算子で記述する場合、次のようにネストすることになります。
$result = ($x > 10) ? "大" : (($x >= 5) ? "中" : "小"); |
この書き方は動作しますが、条件が増えると 可読性が低下する可能性があります。そこで、以下のように改行とインデントを使い、見やすく整理するのがおすすめです。
$result = ($x > 10) ? "大" : (($x >= 5) ? "中" : "小"); |
また、複雑な条件分岐では、if-else文を使うほうが分かりやすくなる場合もあります。特に、ネストが深くなると可読性が下がるため、三項演算子を適用する範囲を見極めることが重要です。
9.まとめ
今回は、PHPの三項演算子の使い方や注意点についてお話ししました。
三項演算子は使えるとコードの可読性が高くなり、管理がしやすくなります。しかし、どんな場面でも使うのが適切とはいえません。書き方の1つの方法として覚えておくのがおすすめです。
最後までお読みいただきありがとうございました。
本記事が皆様にとって少しでもお役に立てますと幸いです。
「フリーランスボード」は、数多くのフリーランスエージェントが掲載するITフリーランスエンジニア・ITフリーランス向けの案件・求人を一括検索できるサイトです。
開発環境、職種、単価、稼働形態、稼働日数など様々な条件から、あなたに最適なフリーランス案件・求人を簡単に見つけることができます。
単価アップを目指す方や、自分の得意なスキルを活かせる案件に参画したい方は、ぜひ「フリーランスボード」をご利用ください。