PHPファイルの終了タグ(?>)?


17

PHPファイルを?>で閉じることを誓う人もいれば、それを残す方がより最適化されていると言う人もいます。

そこにそれを置くことは必須ではないことを知っています、私はこれを行うことの長所と短所が何であるか、そしてベストプラクティスは何であるか疑問に思っています。



一部の人々は、「より最適化された」というフレーズが「より速く動作する」ことを意味することを意図していると考えています。第一言語が英語でないかもしれない話者は、「より最適な」または「より良い練習」のようなものを意図していたかもしれません。
スコットCウィルソン

回答:


27

それはパフォーマンスの問題ではありません- ?>毎秒100万個のファイルを含めない限り、末尾の解析は簡単であり、目立った違いはありません。

IIRC、php.netではを追加しないことをお勧め?>します。理由は次のようになります。

  • 不要です
  • に誤って重要な空白を誤って追加する?>と、クライアントに出力され、「ヘッダーが既に送信されている」というあいまいなエラーにつながる可能性があります(これには、含まれているファイルに空白が含まれている場合に、そのファイルを含む)

ここでの回答に基づいて(特に "headers already sent"エラーの原因となる空の不要な空白に関して)、PHPファイルの最後に?>を宗教的に含める習慣を変更しました。PHPStormを使用して新しいファイルを作成したときに、テンプレートが<?phpを?>終了タグなしで挿入したことに気づき、それが単なるずさんなコーディングであると考えました。今、私はよく知っています。
tcrosley

この正確な理由-「ヘッダーはすでに送信されています」-これが私の雇用主(大きなWebポータル)によって厳密に禁止されている理由でした。書いたばかりのファイルの最後で忘れてしまったとき、それは一つのことです。深さ3を含むライブラリエントリを編集すると、テキストエディターが知らないうちに空白を挿入し、突然2棟離れた人が走ったポータルの一部が機能しなくなります。インクルードのツリーは多くの場合100以上のファイルであり、バグを見つけることは忍耐の練習になります。バグが発見され、あなたにさかのぼるので、数週間後に「深い感謝」の訪問を期待してください。
SF。

1
終了タグの後に空白を送信するPHPは、不適切な言語決定のもう1つの例です。
user949300

12

いいえ、彼らは間違っています。

?>PHPでは、ファイルの末尾のオプションです。そして、これには正当な理由があります。最も重要なことは、ファイルの最後にある空のスペースがヘッダーの送信を妨げないことです。これはどこのファイルでも見つけることができるため、見つけるのが難しいバグです。

通常の方法は、PHPがHTMLと混在している場合に終了タグを付け、純粋なPHPファイルには付けないことです。ZENDフレームワークや他の多くのコーディング標準ですらあります。

最適化とは、コードがより速く実行されることを意味します。これは、それらが間違っていることを証明するのは簡単です。コードのプロファイルを作成し、それらがあなたにでたらめを言っていることを理解します。


4

誤って余分な改行文字が送信されないように、初心者には追加しないようにすることをお勧めします。あなたが言及したようにそれを持っていることは必須ではないので、一般的な理由は間違いを避けるためにそれを残すほうが良いと思います。

私はそれに関連する「最適化」があるとは思わない。

私はあなたをここに指すでしょう:https : //stackoverflow.com/questions/4410704/php-closing-tagそしてここ:https : //stackoverflow.com/questions/3219383/why-do-some-scripts-omit-the -closing-php-tag


1
初心者であろうと
なかろ

@Mchl私は...オフのままの理由はかなり些細であり、最終的にはそれだけで、プログラマの好みやそのない、本当にOCDの問題にまで来ていることを指摘するだろう
ケネス・

1
私は?>純粋なPHPを含むファイルを見るたびにうんざりします。
カフェインされた飛行士

@ケネス:それらが些細な場合-私はそれらを見ることができません。OCDの部分は冗談を意味していました。
-Mchl
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.