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

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

こんにちは。Webクリエイター/サウンドクリエイターを名乗っている「とみっち」です。

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

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

と先輩エンジニアから言われたのが衝撃的だったので、今回の記事で紹介します!

おすすめネット回線BEST3

PHPの開始タグと終了タグ

PHPではおなじみのこの構文↓


PHPを動作させるために必要な記述ですよね。

PHPの開始タグである「<?php」と終了タグである「?>」で囲むことで、間の記述がPHPスクリプトですよと明示します。

実はPHPの終了タグは省略することが可能なのです!

PHPの終了タグは省略可能

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

?>

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

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


見出し

テキストテキスト…

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

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

Zend Frameworkの場合

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

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

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

2019年7月現在、上記で紹介したZend Frameworkの既約に関するページが消えていました…。

PHPの終了タグは「省略できる」という曖昧な決まりではなく、「省略しなければいけない」っていう厳格な仕様にしてよって思います。

しかしHTMLの記述の中に、PHPの記述を差し込められるという便利な仕様があるため仕方ないですね。

PHPの終了タグ以降の改行タグで問題が起きることも

PHPの終了タグを省略しないことで問題が起こる事例を紹介します。

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

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

[許容される改行]
[ここに無駄な改行]
[EOF]

例として紹介するこのPHPファイルでは、PHPの終了タグ「?>」の後に改行コードが2つあります。[EOF]はEnd Of Fileの略で、ファイル内での終了箇所です。

無駄な改行コードが含まれるPHPファイルを使用すると、プログラムが誤作動する場合があります!!

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

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

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

[許容される改行]
[EOF]

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

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

終了タグの後の改行コードに毎回気をつけるよりも、終了タグは省略すると決めておくと、よっぽど楽ということですね!

当記事が「レバテックキャリア」で紹介されました

IT・Web業界のエンジニア、デザイナーのスキルアップに役立つコンテンツを発信中の「レバテックキャリア」に、当記事が紹介されました!

僕は一応はプログラマーでもあるので、プログラミングに関する記事を書いて、このように紹介されることは嬉しいです!

おすすめネット回線BEST3