PHPのif文を一行に省略する方法【三項演算子】

PHPのif文を書く際に、カッコを省略して一行で端的に書く方法についてまとめました。

TRUEの場合の処理だけ書きたい場合

「判定が正しかったら〇〇する」という処理だけで構わない場合(elseで違ったらの処理はいらない場合)、if文は波括弧を省略して一行で書けます。

サンプルコード
$point = 100;

if($point == 100) echo '満点!';
満点!

if文から改行が入っても問題なく判定されます。

サンプルコード
$point = 100;

if($point == 100)
    echo '満点!';
満点!

注意!波括弧省略でif文の処理が出来るのは1つの命令だけ

if文を括弧を省略する書き方は、判定内として判断されるのは1つだけ(最初に;が付く箇所まで)です。

例えば、以下のソースコードの出力結果を見てみてください。

サンプルコード
$point = 80;

if($point == 100) echo '満点!'; echo 'おめでとうございます。';
おめでとうございます。

変数が100ではないので、ifの判定によって、最初の「満点!」は表示されていませんが、続くechoの「おめでとうございます。」は表示されてしまいます。

これは、括弧を省略したif文は、1つの処理しか判定として受け付けないからです。

改行を行った場合も同様。

サンプルコード
$point = 80;

if($point == 100)
    echo '満点!';
    echo 'おめでとうございます。';
おめでとうございます。

なので、命令が2つ以上ある場合は{}でくくる必要がある、ということは絶対に覚えておきましょう。

elseを含めた分岐処理も1行で書きたい場合(三項演算子)

三項演算子という書き方で、1行で判定に応じて処理を切り替えることが出来ます。

変数代入を一行で分岐

変数の代入を判定に応じて切り替える方法です。

変数 = (判定) ? 正の場合 : 偽の場合;

下記のソースコードは、点数が80点以上の場合は「合格」、そうでない場合は「不合格」の文字を代入します。

サンプルコード
$point = 60;

$result = ($point >= 80) ? '合格' : '不合格';

echo $result;
不合格

パッと判定処理を書きたい場合は便利なので覚えておきましょう。

echoによる出力を一行で分岐

echoによる出力を、条件分岐の判定で切り替えることが出来ます。

echo (判定) ? 正の場合の表示 : 偽の場合の表示;
サンプルコード
$point = 90;

echo ($point >= 80) ? '合格' : '不合格';
合格

PHPにおける、ifの分岐処理を一行に省略する書き方をまとめました。

しかし、省略したからといって可読性が上がるわけではなく、むしろ読みにくくなる可能性もあります。
また、Appleの例のように、判定ミスによるバグを引き起こす原因にもなり得ます。

使いどころをしっかり見極めて、効率的な開発を行っていきましょう。

以上、PHPのif文を一行に省略する方法、でした。

PHP