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つ以上ある場合は{}でくくる必要がある、ということは絶対に覚えておきましょう。
かの有名なAppleも、言語こそ違いますが括弧を省略した上で命令を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文を一行に省略する方法、でした。
ディスカッション
コメント一覧
まだ、コメントがありません