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行だろうがなんだろうが必ず中括弧を書くべきではないかと。