Language
日本語
English

Caution

JavaScript is disabled in your browser.
This site uses JavaScript for features such as search.
For the best experience, please enable JavaScript before browsing this site.

  1. Home
  2. PHPBeginner - What is a PHP Block?

What is a PHP Block? - Japanese Only

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

これまで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』についてやっていきたいと思います。

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

This article was written by Sakurama.

Author's beloved small mammal

桜舞 春人 Sakurama Haruto

A Tokyo-based programmer who has been creating various content since the ISDN era, with a bit of concern about his hair. A true long sleeper who generally feels unwell without at least 10 hours of sleep. His dream is to live a life where he can sleep as much as he wants. Loves games, sports, and music. Please share some hair with him.

If you find any errors or copyright issues, please .