2009-07-16 歯牙
PHPの閉じタグは心の臓に悪いから使わないで
閉じタグってのは「?>」のことね。未だに閉じタグ使ってるコードを見ると一瞬ドキッとするんだよね。(自分の昔のコードも含むw)
いや、ちゃんとわかってて確実に使いこなしてるならいいんだけどたまに
-- ここがファイルの先頭 -- <?php class Foo { // いろいろ } ?> -- ここがファイルの後尾 --
みたいな感じで閉じタグの後に改行コードが一つ入ってたりするのを見ると「あわわわ」ってなっちゃう。
実際には改行一つだけなら問題は出ない、PHPは閉じタグの直後の改行を消してくれるからね。
問題は改行が二つ以上あった場合だ。これは悲惨なことになる。PHPは閉じタグ以降のデータ(というか範囲外のデータ)は全部HTMLとして出力される仕様なので、改行コードが表示されちゃう事態に。
表示されちゃうっていうのは語弊があるか、元々PHPはHTMLに埋め込むための言語なのでの範囲外の文字列が表示されるのは当たり前の動作だからね。
でもだ、もしrequire_onceして利用するライブラリファイルに改行コードが混入しちゃったりしちゃってたら相当ヤバイ。マジヤバイ。危険。超危険。
最終的にHTMLを出力するだけの処理なら改行コードの一つや二つ混入しちゃっても表示上問題出ないし、まいっかー(いい感じ〜)ってなるかもしんないけど、header関数とかでヘッダ出力してる場合は先に改行コードが出力されてしまうため、ヘッダの出力が有効にならなくなっちゃうので爆危険。例えばリダイレクトとか動かなくなる。
-- ここがFoo.class.phpの先頭 -- <?php class Foo {} ?> -- ここがFoo.class.phpの後尾 --
<?php // Foo.class.phpをrequire_onceした時点で改行コードが表示されてしまう。 require_once 'Foo.class.php'; // ヘッダ出力より先にデータが表示されてしまったため、このリダイレクトはうまくいかない! header("Location: index.html"); ?>
ってことで、閉じタグは省略しても良い仕様なのでじゃんじゃん省略した方がヘタなバグ混入を避けるという意味で良いと思います。
追記
Zend Frameworkのコーディング規約においては、「使わない方が良い」ではなく、「決して使うな」と書いてますね。
カシオ
購入: 8人 クリック: 47回
購入: 8人 クリック: 47回





