PHP学習コラム第2回 『開始タグと終了タグの適切な書き方』「ぺち子の目指せPHP初級試験合格!」

PHP学習コラム第2回 『開始タグと終了タグの適切な書き方』「ぺち子の目指せPHP初級試験合格!」

テンプスタッフ・テクノロジー株式会社

2012年6月28日 23:12

※この記事は読者によって投稿されたユーザー投稿のため、編集部の見解や意向と異なる場合があります。 また、編集部はこの内容について正確性を保証できません。
こんにちは~、ぺち子です! 前回の info.php は動きましたか? 動いたことにして、今日のテーマに進みましょう! 今日のテーマは、『開始タグと終了タグの適切な書き方』です。 PHPの開始タグと終了タグとは、「<?php」と「?>」のことですね。 私は最初この2つに何の疑問も持たずに適当に使っていましたが、いくつか知っておかなければならないことがあったのです! その前に、ちょっとしたおさらいです。 前回の info.php では、PHPのコードを「<?php」と「?>」でこのように囲いました。 ------------------------------------------------------------ <?php phpinfo(); ?> ------------------------------------------------------------ これは、次のように一行でも書けます。 ------------------------------------------------------------ <?php phpinfo(); ?> ------------------------------------------------------------ がっつりPHPを書く場合は前者を、HTMLの中にちょこっとだけPHPを埋め込むときには後者の形を使うことが多いです。 「HTMLの中にちょこっとPHPを埋め込む」とは、例えばこんな感じです。 [index.php(1)] ------------------------------------------------------------ <html> <head> <title>トップページ</title> </head> <body> 今日は<?php echo date("Y年m月d日"); ?>です! </body> </html> ------------------------------------------------------------ 会社のプロジェクトのように体系立てで開発を行うような場合は、こんな風にHTMLとPHPが混ざったりしませんが(分ける方法があるのです)、WordPressなどのCMSでは、このような書き方が使われています。 また、PHPのファイルでは、「<?php」と「?>」で囲った部分以外はすべてHTMLとして解釈されるので、わざわざ次のように書いたりはしません。 [index.php(2)] ------------------------------------------------------------ <?php echo "<html>"; echo " <head>"; echo " <title>トップページ</title>"; echo " </head>"; echo " <body>"; echo " 今日は" . date("Y年m月d日") . "です"; echo " </body>"; echo "</html>"; ?> ------------------------------------------------------------ ところで、古いPHPコードでは開始タグ「<?php」の代わりに「<?」を使用しているものもありますが、これは非推奨です。 php.ini の設定で「<?」の使用を禁止していなければ、今でも一応使うことはできるのですが、HTMLファイルの先頭にあるXMLのタグ(<?xml …>)がPHPコードだと勘違いされちゃったり、想定外なことになる可能性があるので、特別な理由がなければ「<?php」を使うべきです。 最後に、これが一番重要なのですが、終了タグ「?>」の省略についてです。 PHPは、終了タグ「?>」、またはファイルの終端(EOF)でPHPコードが終わると解釈するので、ファイルの最後に終了タグが来る場合、終了タグを省略することができます。 [info.php] ------------------------------------------------------------ <?php phpinfo(); ------------------------------------------------------------ そして、「ファイルの最後の終了タグは省略した方がいい(するべきである)」という人も少なくありません。 その理由を説明する前に、次の2つのPHPファイルを見てください。 ブラウザでは、redirect.php の方にアクセスします。 [url.php] ------------------------------------------------------------ <?php $url = "http://www.example.com"; ?> ------------------------------------------------------------ [redirect.php] ------------------------------------------------------------ <?php // url.php を読み込む include "url.php"; // $url のリンクにリダイレクトする header("Location: " . $url); ?> ------------------------------------------------------------ [Wikipedia:リダイレクト]http://bit.ly/KVvGyd[PHPマニュアル:include]http://jp2.php.net/manual/ja/function.include.php[PHPマニュアル:header]http://php.net/manual/ja/function.header.phpredirect.php から include された url.php で、変数 $url を定義しています。 このとき、問題になるのは、url.php の終了タグです。 もし、この url.php の終了タグの後ろにスペースが入力されていたらどうなるでしょうか。 [url.php(2)] ------------------------------------------------------------ <?php $url = "http://www.example.com"; ?> ←ここにスペース ------------------------------------------------------------ もしくは、終了タグの後ろに改行が2つあったら…? [url.php(3)] ------------------------------------------------------------ <?php $url = "http://www.example.com"; ?> ←2つ目の改行 ------------------------------------------------------------ 結論から言うと、url.php(2) や url.php(3) を include した redirect.php はPHPエラーで動きません。 PHPファイルでは、PHPコード以外の部分はHTMLとして出力されます。 つまり、url.php(2) を実行すると、スペースが1つ出力されます。 また、終了タグの直後の改行は無視されますが、その後の改行は無視されません。 つまり、url.php(3) を実行すると、改行が1つ出力されます。 「別にスペースや改行くらい出力されても問題ないのでは?」 「どうせブラウザで表示するときには無視されるし…」 と思いますよね!? でもこの例の場合、続きのPHPコードの中に、リダイレクトするための header 関数があります。 header 関数は、HTMLの出力がまだ何もないときにしか使えず、そうでないときにはエラーになっちゃいます。 WebサーバにあるHTMLファイルは、通信に使う「ヘッダー」という部分と、表示に使う「HTML文書」に分かれています。 テキストファイルとして編集するときには「HTML文書」しか見えませんが、PHPでは「ヘッダー」の方も操作できます。 で、header 関数はこの「ヘッダー」を操作するものなので、「HTML文書」よりも先に操作する必要があるのです。 ファイルが増えてくると、このエラーがどこで起きているのか探すのも大変になります。 「?>」の後ろに余計なスペースや空白がないか毎回チェックするのも一苦労です。 そのため、「ファイルの最後の終了タグは省略した方がいい(するべきである)」と言われています。 私個人の意見としては、開始タグがあるんだから、終了タグもちゃんと書いた方がいいと思っていますけどね!笑 私が前に参加していたプロジェクトでは、「終了タグはちゃんと書く。ただし、終了タグの後ろは改行しない」というコーディングルールがありました。 ではでは、まとめです。 終了タグを書くにしろ省略するにしろ、開発者同士でコーディングルール(どういう体裁でコードを書くか)を統一するべきです。 ある人は終了タグを省略しているのに、別の人は書いていたりしたら、煩雑になっちゃいますからね。 1人で開発するときも、自分なりのコーディングルールを持つことは、メンテナンス性を保つためにも重要です。 昔の自分が書いたコードというのは、「ほんとにこれ自分が書いたの?」と思うことが多いんです。 自分で書いたメモなのに、字がが汚くて後から読めなくなっちゃう人っていますよね。あんな感じです。笑 ルールに沿っていれば、後からでも割と読みやすくなりますよね。 さて、あなたはどういうルールにしますか? ************************************************************ 「ぺち子の目指せPHP初級試験合格!」PHP学習コラム目次 第一回 「info.phpを作成し、ブラウザで表示させる おまけ:GUNDAM」http://on.fb.me/K5jfiq第二回 「開始タグと終了タグの適切な書き方」http://on.fb.me/MwF3T4第三回 「ホワイトスペースと大文字小文字の使い方」http://on.fb.me/KzPf1T第四回 「ダブル&シングルクォートと、ヒアドキュメントの使いどころ」http://on.fb.me/KCYklK
この記事のキーワード

人気記事トップ10

人気記事ランキングをもっと見る