PHP覚え書きブログ

【2012年02月23日】

有名な話かもしれないが、改めて。
PHPのコードは、PHPタグで囲うというのは常識。
<?php ~ ?>

この終了タグは無くてもちゃんと動作する。
ない場合はファイルの終点で終了と解釈される。
しかし実は書かなくても良いのでなく、書くべきではない。
なぜか。

ファイルの中のPHPタグで囲われている部分以外はそのままレスポンスとして出力される。もし、PHPの終了タグより後ろに改行とかが入っていたらそれもレスポンスに含まれる。
こいつが悪さをする場合がある。通常は大丈夫だが、header関数なんかを使ってヘッダを送信するような場合に問題が起こる。

ヘッダというやつはヘッダよりも前に何か文字列が存在してはならない。
PHPの終了タグの後ろに改行があるようなスクリプトでheader関数を使うとエラーになるのである。ヘッダより前に改行が存在してしまうから。
これを防ぐためにも、終了タグは無しにするべきである。無しにしても害は全くない。

実際、ZendFrameworkのコーディングルールでは終了タグは書いてはいけないことになっている。
その他のフレームワークを見てみても、書いていないものもある。