PHP覚え書きブログ
【2012年02月06日】
PHPにおいてはif文の書き方が結構いろいろある。
一番正統なのは言うまでもなくこれ。
<?php if (true) { echo 'trueです'; } else { echo 'falseです'; } ?>
これに対して省略記述が存在する。
<?php if (true) echo 'trueです'; else echo 'falseです'; ?>
つまり、中括弧が省略できるのだ。
この場合、if文の影響範囲は1ステップのみになる。
下の例の通り。
<?php if (true) echo 'trueです
'; echo 'これは出力されるでしょうか'; ?>
trueです
これは出力されるでしょうか
<?php if (false) echo 'trueです
'; echo 'これは出力されるでしょうか'; ?>
ではこれはどうなるか。
elseを記述し、
if~elseの間に2ステップ入れてみる。
<?php if (true) echo 'trueです
'; echo 'これは出力されるでしょうか'; else echo 'trueです
'; echo 'これは出力されるでしょうか'; ?>
Parse error: parse error, unexpected T_ELSE in ・・・
この通りエラーとなる。当然。
この省略記述、どうなのだろうか。
一般的にはよく使われているようだが。
自分は嫌いである。
まず、ソースが読みにくくなる。
極端だがこんな例。
<?php echo 'aaa'; echo 'iii'; if (true) echo 'uuu'; echo 'eee'; ?>
パッと見、if文の影響範囲がわかりにくい。
もう一つ、もっと嫌な例
<?php echo 'aaa'; echo 'bbb'; if (true) echo 'ccc'; echo 'ddd'; if (true) echo 'eee'; echo 'fff'; ?>
if文の直後に改行は入れても入れなくても良いのだが、
入れるパターンと入れないパターンが混ざっていたら最悪。
わかりにくすぎる。
もしやるならどちらかに統一すべき。
しかしそもそも省略する必要があるだろうか。
ある日、ifに対する処理が2行必要になったとしたらその時は中括弧を書く必要が出てくる。
それなら最初から必ず書くように決めておくのが良い。
一番問題なのは、一つの構文に対してあちらこちらで書き方が違うということ。
if文に限らずこういうのはソースの可読性を大きく下げる。
2行以上の処理がある場合は必ず中括弧が必要なのだから、1行だろうがなんだろうが必ず中括弧を書くべきではないかと。


