PHP 書き方

WordPress コード

PHP 終了タグをどうしても書いてしまう人の心得


Perl での HTML の処理の面倒な点を簡略化してくれたのが PHP で、文字コードの柔軟性も獲得し、多くの Perl ユーザーは PHP に自然となじんで使い続けているのが現状です。当初は文字コードと改行コードに悩まされましたが、現在でもまだこの呪縛があるのが現状です。

このページの内容は、PHP の終了タグに理由をつけて、主に Windows エディタをどのように設定しておくと、トラブルが減るかという、小ネタです。エディタは、EmEditor と 秀丸エディタ とMifes しか扱いませんので、他のエデイタをご利用の方は読み替えて設定してみてください。

PHP の書き始め

PHP は普通の HTML と同列に記述することができます。具体的には、テキストファイルの拡張子を .php にして、中身は HTML を記述するだけです。一度も PHP のコードを書いていない .php ファイルであっても、HTML が記述されていればそれをそのままブラウザは表示します。

 
<html><body>
<h1>Hello World!</h1>
<p>Thank you for watching.</p>
</body></html>

というようなコードが .php に記述されていたら、そのまま HTML(ただのテキスト)をサーバーは吐き出します。
ここで、この HTML テキストの一部を PHP で書き換えたいときは、

 
<html><body>
<h1>Hello World!</h1>
<p>Thank you for <?php echo "visiting";?>.</p>
</body></html>

として、echo 文を入れたりします。
この場合は、必ず文法的に「<?php ;?>」のように、PHP の開始タグと終了タグが必要です。
PHP の開始タグは「<?php」の「<?」の2通りあります。終了タグは「;?>」になります。

ところが、PHP の規約などをよく読んでみると、

PHP ファイルの書式
全般
PHP コードのみからなるファイルでは、終了タグ ("?>") は決して含めてはいけません。これは必須なものではなく、 終了タグを省略することで、ファイルの最後にある空白文字が出力に影響することを防ぎます。
参考:https://framework.zend.com/manual/1.12/ja/coding-standard.php-file-formatting.html

とあります。
これは、一つの .php ファイルに HTML の記述と PHP の記述が混在しているようなケースではなく、初めから最後まで PHP のコードをひたすら書いたファイルについてのルールです。

この点は、しかり理解しておく必要があります。初期のバージョンの PHP では、終了タグをどうするかの記載がないか、PHP は開始タグから始まり終了タグで終わる程度の流したような説明でした。その後、終了タグは省略できるというような、どちらでもいいような表現になり、現在では「終了タグは決して含めてはいけません」という強い禁止表現が使われています。

実のところ、終了タグ ("?>")については、正しく使われている限りにおいては何の問題もありません。昔の初期バージョンから使い続けている人がいれば、おそらくあってもなくても問題ないという認識の人が多いと思います。
ところが、最近は .php ファイルを自動生成したり、書き換えたり、末尾にデータを書き加えたりというような使い方も普通にみられるので、ズバリ、終了タグ ("?>") は書いてはいけないと認識しておく方が都合がよろしいといえます。

「オレはよくわかっているから、わざとファイルの終了を意識するために終了タグを書くのさ、几帳面さはプログラマの心得」という人は、少なからずいますが、ここは皆とうまくやるために、ルールを曲げてあげるのがオトナというものです。

それでも終了タグを書いてしまう人は

終了タグ ("?>") そのものは正しく使うにおいては問題ないものですので、要は終了タグ以降に無駄なデータが含まれていなければよいわけです。
終了タグ以降に含まれる無駄のデータというのは、コメント文などの白々しいものを除けば、空白コード関係です。全角の空白を含めていたというような、ド素人的なミスはともかく、半角スペースが知らない間に入ってしまっていたというようなことは、あり得ることです。ある程度のベテランであれば、そんなこともあり得ないのですが、唯一あり得るのは、意識しない改行コード「\r、\n」が含まれてしまうケースです。編集の仕方によってはタブ文字「\t」などを入れてしまうような初歩ミスもあり得ます。

これらの多くのエラーは、Mac、Windows、UNIX 系のシステムでの改行コードの違いに依存します。多くのエディタでは改行コードをどう扱うかの設定ができるようになっているので、ここをチェックするだけでこられを避けることができて対応可能です。

簡単ですが、普段使いのエディタで改行コードを視覚化してしまうのがベストです。半角スペースに関しては視覚化するとうっとうしくなるだけですので、半角スペースだけは意志力で注意するのがベストです。

ここでは、Windows 版のエディタを例に、視覚化した例を示します。

EmEditor の場合

Mifes 改行コード表示
Mifes 改行コード設定
見栄えが最もまともな EmEditor です。私の場合は改行(\r, \n)とタブ(\t)を視覚化しています。そのため、ファイルの末尾に不要な改行コードをつけて保存してしまう凡ミスが激減しています。

秀丸エディタの場合

秀丸 改行コード表示
古くから使われるエディタですが、普通に改行コードとタブを視覚化できます。
秀丸 改行コード設定
秀丸 改行コード設定

Mifesの場合

Mifes 改行コード表示
MS-DOS 時代からのエディタですが、当然視覚化できます。
Mifes 改行コード設定
有名どころのエディタを挙げましたが、改行コード周りと全角スペースの視覚化さえできれば、思わぬところにスペースが入って表示が崩れるといったエラーには悩まされなくなります。

EOF 直前をチェック

Mifes EOFと改行コード表示
図は Mifes で改行コードを表示させた例です。
ファイルの末尾を示す "EOF" の前に余計なコードが入っていないか確認します。
上のエディタであれば、 EOF の前に改行コードが入っていれば記号化されて視覚化されますので、すぐにわかります。

一番上の例で ?> 直後の EOF との間に、余計なコードが一切入っていなければ、最後に ?> を書いたとしても、レイアウトが崩れることはレアです。

EOF 直前の余計なコードを省くには

PHP を記述したファイルは多くはテキストファイルはテキストファイルに過ぎないので(例外的にバイナリファイルあり)、perl などでファイル末尾を一気に処理する方法もあります。ただし、必要以上に削ったりする予期しないエラーを防ぐには、エディタで保存時に注意を払うのが無難です。

-WordPress, コード
-, , ,

© 2020 ネーテルス