Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

  1. トップページ
  2. PHP入門編 - PHPブロックとは

PHPブロックとは

みなさまどうもおはこんばんにちは。

これまでPHPの実行環境構築などとてもお疲れ様でございました、では改めましてPHPをちょいちょい記述していきましょう。

まずPHPはHTMLに組み込まれることに情熱を燃やしている言語なので他のプログラム言語と比べて記述する方法がちょっと特殊で、HTMLタグ的な『PHPブロック』と呼ばれるブロックで囲ってあげる必要があったりします。まずはこちらの使い方から確認していきましょう。

と、その前に一つだけ関数を紹介します。それは『echo』という関数です。これまでの記事でもちょっと出てきますね。これは文字列を出力する関数になります。後で詳しく解説するので「文字が出力されるんだな」とだけ覚えておいてください。

(´-`).。oO(『echo』は正確には関数ではなく『言語構造』になります...それほど意識しなくてもOKですが念のためご注意を...)

そしたら以下のソースコードを確認してみてください。以下はシンプルなHTML5のソースコードにPHPを組み込みしたものです。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>PHPテスト</title>
</head>
<body>
<?php
	//ここにPHP書くよー
?>
</body>
</html>

上記のbody要素の中に『<?php』と『?>』いう部分がありますよね、これが『PHPブロック』と呼ばれる部分になります。『<?php』が開始タグで『?>』が終了タグ(閉じタグ)ですね。この『PHPブロック』の中に書いてある記述はPHPプログラムとして処理してくれます。逆に『PHPブロック』の外側の記述は通常の文字列として出力、つまり処理されずそのまま表示されます。なぜこんな構造になっているのかというと、PHPはHTMLに組み込みされることに特化した言語なのでPHPプログラムの部分と、その他の部分を明示的に分ける必要があるからだったりします。

では先ほどのソースコードに『Hello world』プログラムを仕込みしてみましょう。こんな感じになります。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>PHPテスト</title>
</head>
<body>
<?php
	echo 'Hello world';
?>
</body>
</html>

これを『index.php』に保存して『MAMP』を動かした状態で『http://localhost』と打ち込んでみると『Hello world』が出力されているはずです。これがPHPプログラムの基本的な記述方法となります。PHPプログラム部分を『PHPブロック』で囲めば良いだけなので特に難しくはないかと思います。

では『PHPブロック』の使用における注意点を見て行きましょう。まず『PHPブロック』の内側と外側で世界が全く違う、ということに注意してください。たとえば『あいうえお』という文字を『PHPブロック』の内側に書くとさくっとエラーになります。『PHPブロック』の外側ならばただのHTMLの世界になりますのでOKでございます。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>PHPテスト</title>
</head>
<body>
<!-- これはエラーです。 -->
<?php
	あいうえお
?>
</body>
</html>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>PHPテスト</title>
</head>
<body>
<!-- これはOKです。 -->
<?php
	
?>あいうえお
</body>
</html>

もういっちょハマりやすい注意点があり、『PHPブロック』で終了するファイルは『PHPブロックの終了タグ』を書くべきではない、というのがあります。

なんのこっちゃってお話なんですが、例えばhtml要素の終了タグをPHPで出力させる場合はこれまでの『PHPブロック』の記述方法を鑑みると以下のような感じになりますよね。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>PHPテスト</title>
</head>
<body>
</body>
<?php
	echo "</html>";
?>

この書き方があまりよろしくない、ということになります。よろしい書き方は以下です。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>PHPテスト</title>
</head>
<body>
</body>
<?php
	echo "</html>";

『PHPブロック』の終了タグの『?>』が記述されていないのが確認できたと思います。このように『PHPブロック』で終了するファイルは『?>』を書かないのがベストです。

さて、なぜ終了タグを書いてはいかないのか、というとPHPの言語構造の問題だったりします。PHPは『PHPブロック』の外側は普通の文字として出力してしまうため、『?>』のあとに改行文字などが存在した場合はそれがそのまま出力されてしまい予想と違う動きをしてしまったりエラーの原因となってしまうケースが多いからです。

ちなみに先程のよろしくないと言った以下のサンプルを実行させると普通に問題なく動きます。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>PHPテスト</title>
</head>
<body>
</body>
<?php
	// 実は問題なく動きます。
	echo "</html>";
?>

上記のような文字を出力する、といった単純な処理ならばおしりに『?>』と改行をいれてしまっても特に問題なく実行させることができます。

しかし、PHPのみで構成されているファイル(関数定義用のファイルなど)の取り込みを行った場合などは『?>』以降の改行文字などが処理に取り込まれてしまい、それが原因でエラーとなってしまうことがあるのです。というわけで『PHPブロック』で終了するファイルは『PHPブロックの終了タグ』を書くべきではないのでございます。

もしどうしても終了タグを書きたい、書かないと何だか気持ち悪い、といった場合は『?>』の先に改行などを入れず、ビシッと『?>』でファイルを終了するようにしましょう。

<?php
echo 'Hello world';
/* 以下のようにバシッと『?>』でファイルを終了させるようにしましょう。*/
?>

('-`).。oO(とは言うものの、余計なバグの原因になりますので著者はおしりの『?>』は書かないことを薦めます...)

『PHPブロック』は『ショートタグ』というものが用意されており、開始タグは『<?』、終了タグは『?>』と記述すればそのブロック内でPHPを実行させることができます。

<? // こんなPHPブロックもあります。
echo 'Hello world';
?>

ただし、この設定はちょっと古めのデフォルトのPHPの設定では無効とされており、そのままの状態では使用することができません。そして、そのまま無効にしておくのが良い、と言われています。

それはXMLドキュメントの宣言と判別がつかなくなってしてしまうから、という理由らしいです。XMLドキュメントの宣言は以下のようなものになります。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

ものの見事に『<?』と『?>』が使われちゃっていますね。なので『PHPブロック』なのかXMLドキュメントの宣言なのかPHPちゃんが困惑してしまう危険があるので『<?』と『?>』のショートタグは使用しないほうが良い、とされている感じです。

しかし、最新のPHPはデフォルトで『<?』と『?>』のショートタグは使用可能となっています。

その理由はPHPから別のXMLファイルを書き出すことは多々あれど、XMLファイル本体を『.php』とかにしてPHP処理を走らせるというパターンはあまりないから無効にしておく意味があんまりなかった、という判定が下された感じです。著者も別にどちらでもいいのでは、と考えています。

ここは議論が分かれるところではありますが、「『<?』と『?>』は使っちゃダメ!」という方が大多数だったりします。ですので、仕事としてPHPを記述するときのPHPブロックは余計なトラブルを避けるため、素直に『<?php』と『?>』を使用したほうが無難かもしれません。

というわけで『PHPブロック』とPHPの基本的な記述方法は以上となります。さて、ここまで軽くPHPを記述してみたはいいものの、裏側でどういう感じになっているのかがちょっと謎な感じですよね。なので次の項目では『CGI』についてやっていきたいと思います。

ではではこのへんで。またお会いしましょう

この記事は桜舞が執筆致しました。

著者が愛する小型哺乳類

桜舞 春人 Sakurama Haruto

ISDN時代から様々なコンテンツを制作しているちょっと髪の毛が心配な東京在住のプログラマー。生粋のロングスリーパーで、10時間以上睡眠を取らないと基本的に体調が悪い。好きなだけ寝れる生活を送るのが夢。ゲームとスポーツと音楽が大好き。誰か髪の毛を分けて下さい。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。