PHPのif文の書き方3パターンの紹介
SI屋からWeb屋に転職した時、僕は初めてPHPに触りました。
その会社は社員数10人規模で、エンジニアは僕を含めて3人で制作案件をひたすら回していたので、毎日終電、納期が迫ると会社に泊まり込みの日々でした。
約二年間、そんな生活をしていたのでPHPには自信があったのですが、WordPressのテンプレートファイルをカスタマイズするようになってから、
ん?このif文どうなってんだ?
と、今まで見たことのないif文の記述で躓いた経験があリます。
調べた結果、PHPにはif文の書き方がいくつかあることがわかったので、特に気にしていませんでしたが、たまにWordPressのテンプレートをいじっていると、
あれ?あのif文ってどうやって書くんだっけ?
となるので、備忘録としてPHPのif文の書き方に触れたいと思います。
if文の記述方法
if文の書き方は全部で3つあります。
- 波括弧
- コロンを使ったif文
- 1行で書くif文
それぞれ紹介していきます。
(なお、なんでif文の記述が複数あるのかについては、書き方の次に触れています)
波括弧
一般的な記述方法なので、PHP経験者であれば特に説明する必要もないかと思いますが、例を挙げておきます。
<?PHP if ($num > 50) { echo "50超える"; }elseif($num < 50){ echo "50未満"; }else { echo "50ちょうど"; } ?>
なお、変数$numには数値が入っている前提です(以下同様)
コロンを使ったif文
「初めてWordPressのテンプレートに触った時にわからなかったif文」というのがこちらです。
<?PHP if ($num > 50) : echo "50超える"; elseif ( $num < 50 ): echo "50未満"; else : echo "50ちょうど"; endif; ?>
この例だと、先の波括弧とあまり変わりません。
実はこの書き方は、WordPressのindex.phpやsingle.phpのように、HTMLコーディングが中心のPHPファイルで一部、要素の出しわけが必要なときに使ったりします。
例えば、先の例に「50未満の時だけclassをつけて赤字でアラート表示させたい」といった場合は、以下のように値だけではなくhtmlタグごと出し分けできたりします。
以下の様な感じです。
<div/> <?PHP if ($num > 50) : ?> <span>50超える</span> <?PHP elseif ( $num < 50 ): ?> <span class="fontRed">50未満</span> <?PHP else : ?> <span>50ちょうど</span> <?PHP endif; ?> </div>
こちらは簡単な例ですが、分岐ごとにユニークな要素が多い場合などに重宝します。
1行で書く
こちらは読んで字のごとし1行で書くタイプです。
先に紹介したif文を再現する際は以下のように記述します。
<?PHP if ($num > 50) echo "50超える"; if ($num < 50) echo "50未満"; if ($num == 50) echo "50ちょうど" ?>
elseif やelseは使えないので、使う際はシンプルな分岐のときだけですね。
elseif やelseを使う場合は以下のように記述します。
<?php if ($num > 50) echo "50超える"; elseif ($num < 50) echo "50未満"; else echo "50ちょうど"; ?>
おまけ
三項演算子というものもあります。
<?PHP $num = ( $num == 50 ) ? "50ちょうど" : "50ちょうどではない"; echo $num; ?>
//上記は以下のif文と同じ
<?PHP if($num ==50){ echo "50ちょうど "; }else{ echo "50ちょうどではない "; } ?>
なぜif文の記述方法が複数あるのか
先にif文の記述パターンについて紹介しましたが、そもそも、何のためにif文の記述方法を使い分けるのでしょうか。
それはズバリ、ソースの可読性です。
WordPressのテーマファイル作成の例に挙げると、function.phpを作成する場合は波括弧で記述し、index.phpやsingle.phpを作成する場合は、コロン区切りで記述するのが最適だったりします。
また、アドホックな条件にマッチした時だけ表示したいといった要件があれば、1行で記述することで、可読性だけではなく、ステップ数削減にもつながります。
最後に
いくら可読性がよくなってもコメントを書かなくてもいいということにはなりません。
保守性を鑑みて、分岐の条件はコメントしておきましょう。
そういった作業をないがしろにすると、仮に別担当者に引き継いだとしても「あの人のソースはよくわかりません」ということで自分のところに帰ってくる事になります。
コメント一覧
一行で書くタイプでもelse等は使用可能です。
ねじりわさび さん
ご指摘ありがとうございます。
確認して、記事も修正させていただきました。