PHPの最後の終了タグ ?> は付けないでおこうねというお話

この記事は昨年2015年11月に書いたものを修正した記事です。現在は古い情報となっている箇所もある可能性がありますので、ご注意ください。

こんにちは。とみっちです。

何年か前に会社勤めしていた際、

PHPの終了タグは付けてはダメ!!!

って言われたのが衝撃的だったので、同様の記事をよく見かけますが、改めて書いてみます。

PHPの開始タグと終了タグ

PHPではお馴染みの、この構文。

<?php



?>

ファイル全体が純粋なPHPコードである場合と、WordPressやHTMLテンプレートなどで、HTMLの途中にこの記述を差し込んで、PHPを動作させることが可能です。

PHPの終了タグは省略可能

ファイル全体が純粋なPHPコードの場合、PHPの終了タグ

?>

という記述は、省略してもプログラムは動作します。

しかし、HTMLテンプレートなどに、

<h2>見出し</h2>
<p>テキストテキスト・・・</p>
<p><?php echo $variable_text; ?></p>

といった感じで、PHPの構文を差し込んで使用する場合は省略できません。

また、PHPのフレームワークによっては、コーディング規約に終了タグを記述しないように書かれていることもあります。

Zend Frameworkの場合

Zend FrameworkのPHP標準コーディング規約には、以下のように書かれています。

PHP コードのみからなるファイルでは、終了タグ ("?>") は決して含めてはいけません。これは必須なものではなく、 終了タグを省略することで、ファイルの最後にある空白文字が出力に影響することを防ぎます。

省略することを推奨しているかと思いきや、

決して含めてはいけません

と、PHPコードのみのファイルでは終了タグを書かないことを定めています。

省略できる」という曖昧な決まりよりも、「省略しなければいけない」っていう厳格な仕様にしてよって思います。しかし、HTMLの記述の中に、PHPの記述を差し込められるという便利な仕様があるため仕方ないですね。

PHPの終了タグで問題が起きる場合

PHPの終了タグの直後の改行コードは1つだけ無視されるのですが、2つ以上記述されていると認識されてしまいます。

PHPの終了タグ直後に複数の改行コードが見られる悪い例

<?php
  // includeファイル
  // なんか色々書いているとします
?>[許容される改行]
[ここに無駄な改行]
[EOF]

※↑このファイルでは、PHPの閉じタグ?>の後に改行コードが2つあります。
[EOF]はEnd Of Fileの略で、ファイル内での終了箇所です。

こういうファイルを使用すると、プログラムが誤作動する場合があります!!

例えばheader()関数を使用する場合、関数のコール前に改行コードなどの出力があるとエラーとなるので注意が必要です。

また、HTMLでは改行コードを半角スペースとして認識するので、出力されてしまうと、おかしな空白に悩まされる原因ともなります。

毎回、以下のように「許容される改行」が1つのみでPHPファイルを記述できていれば問題はないんですけどね。

<?php
  // なんか色々書いているとします
?>[許容される改行]
[EOF]

PHPの最後の終了タグ ?> は付けないでおこう

何かの拍子に改行タグを打ち込んでしまう可能性がありますので、ファイル全体が純粋なPHPコードの場合、PHPの最後の終了タグ ?> は付けないというルールで統一しましょう。

終了タグの後の改行コードに気をつけるよりも、よっぽど楽ですね!

Facebookアカウントでコメント

※本コメント機能はFacebookによって提供されており、この機能によって生じた損害に対してザ サイベースは一切の責任を負いません。

ABOUTこの記事を書いた人

とみっち

数年前までバンド活動してました。現在はブログを運営して暮らしています。サウンドクリエイター、Webクリエイター。息子は4歳になりました。長野市出身。埼玉県本庄市在住。 【興味】音/Web/車(GolfV GTI等)/田舎/旅/酒 ※自然の音からデスメタルまで聴きます。 @tomicci 詳しいプロフィール 【運営サイト】 ザ サイベース おと風景