PHPプログラムでHTMLに文字列を出力する際、echoやprintなどを使います。
わたくしはなんとなくecho
を使っていましたが、print
派の人もいて、違いは何でしょうか。
それ以外にも、文字列などを括る引用符でシングルクオートやダブルクオートなど、使う人によってバラバラだと思います。
これからご紹介するさまざまな出力方法で、適切な文字列の出力が実現できるでしょう。
echoとprint
echo
とprint
はとくに大きな違いはなく、好みで良いと思いますが、いくつかの違いがあります。
echo
とprint
の書き方は以下のとおりです。
echoの記述例
echo
は,
(カンマ)で複数の値を出力できるのが特徴です。
print
ではエラーになります。
1 2 3 4 5 6 |
<p><?php echo 'テストです。'; ?></p><!--テストです。--> <p><?php $name = '田中'; echo 'こんにちは', $name, 'さん'; //こんにちは田中さん ?></p> |
printの記述例
1 2 3 4 5 6 7 8 |
<p><?php print 'テストです。'; ?></p><!--テストです。--> <p><?php $name = print '田中'; // 変数にprintを付けて値を格納すると 1 が付く print $name; // 田中1 ?></p> |
print
は戻り値があり、1
を返します。
echo
には戻り値はないため、その分若干処理が速いと言われていますが、誤差の範囲でほぼ変わらないと思います。
echoの短縮構文
echo
はPHP5.4からは短縮構文という方法で出力することも出来ます。
1 2 3 4 5 |
// 短縮構文 <?= 'テストです。'; ?> // 通常のecho <?php echo 'テストです。'; ?> |
以下のように表示されます。
テストです。
短縮構文はphp
やecho
といった記述を省くことができ、ソースもスッキリですね。
PHP5.4以前ではphp.ini
の設定で、short_open_tag
をon
にしないと短縮構文は使えません。
PHP5.4以降では短縮構文は設定しなくても常に有効となります。
echoで文字列を複数行にわたって表示
echo
は文字列を一行だけでなく、複数行にわたって表示させることもできます。
1 2 3 4 |
// 改行で複数行表示 echo 'こんにちは!<br> 今日は暑いですね。<br> それではさようなら。'; |
以下のように表示されます。
こんにちは!
今日は暑いですね。
それではさようなら。
ヒアドキュメントのように改行しながら表示できるので、見やすくなりますね。
ヒアドキュメント
PHPには上記以外にヒアドキュメントと呼ばれる出力方法があります。
echo
などで長文を出力する際、引用符や改行文字を気にする必要があり、煩雑となります。
ヒアドキュメントは特定のID内であれば、HTMLのように文字を入力するだけで、引用符やエスケープシーケンス等が必要ないため、簡単に出力できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$name = '田中'; // ヒアドキュメント始まり echo <<<EOM <p>テストです。<br> 今日は天気に恵まれましたね。</p> <p>こんにちは $name さん</p> EOM; // ヒアドキュメント終了 // 最後の区切り文字の後は必ず改行を入れる |
以下のように表示されます。
テストです。
今日は天気に恵まれましたね。
こんにちは 田中 さん。
詳しくは下記リンクを参照ください。
参考:PHPのヒアドキュメントでの簡単出力と、よくあるエラー
ただ、「echoとprint」の項のサンプルと同様にHTMLタグの中にPHPを記述する方法であれば、ヒアドキュメントを使う必要はないでしょう。
私も使ったことがほとんどありません。
引用符による処理の違い
文字列などを括る際に使う' '
(シングルクオート)や" "
(ダブルクオート)を引用符といいます。
どちらを使うかは人それぞれだと思いますが、以下のような違いがあります。
変数を含む文字列の処理
「echoとprint」の項のサンプルと同じ表示となりますが、記述方法が違います。
1 2 3 4 5 6 |
<?php echo '<p>テストです。</p>'; // テストです。 $name = '田中'; echo "<p>こんにちは $name さん</p>"; // こんにちは 田中 さん ?> |
※変数の前後は半角スペースを入れないと、変数より前しか表示されない。
HTMLの<p>
の中にPHPコードを書くか、PHPタグの中で<p>
タグから書くかの違いがありますが、人それぞれ好みの違いだと思います。
ただ、2番めのコードをよく見てみると、" "
(ダブルクオート)で括られています。
これは' '
(シングルクオート)で括ると、変数がそのまま表示されるためです。
以下のように変数の$name
がそのまま文字列として出力されてしまいます。
1 2 |
$name = '田中'; echo '<p>こんにちは $name さん</p>'; // こんにちは $name さん |
変数が含まれる文字列を上記のように出力する場合は、" "
(ダブルクオート)でくくる必要があります。
ただ、前項「echoとprint」のように文字列と変数を一括りにしないように記述すれば、そもそもこの問題は起きないため、前項の書き方をお勧めします。
引用符の重複
以下のように同じ引用符が入れ子になるとエラーとなります。
1 |
echo "<a href="test.html">こちら</a>"; |
上記の場合、echo
の後とa要素内の" "
(ダブルクオート)が重複し、入れ子になっているため、2個目の引用符でエラーとなります。
この場合以下の2つの回避策があります。
エスケープシーケンス
a
要素内の引用符の前に\
(バックスラッシュ)を付けることで、エスケープシーケンスにより引用符は重複せずそのまま出力してくれます。
echo “<a href = \“test.html\“>こちら</a>”;
違う引用符で括る
PHPとHTMLをそれぞれ別の引用符で括るようにすることで、エラーは起きません。
echo ‘<a href = “test.html“>こちら</a>‘;
わたくしの場合、エスケープシーケンスのためにわざわざ文字を付け加えるのが手間なので、違う引用符で括るようにしています。
通常の引用符は' '
(シングルクオート)で、HTMLは" "
(ダブルクオート)で統一しています。
英文を括る場合
以下のようなシングルクォート混じりの英文はダブルクォートの方が効率的だと思います。
“Let’s Get’s Wet’s!!”
シングルクォートの方がダブルクォートより処理が速いと言われていますが、これも誤差の範囲でほぼ変わらないと思います。
わたくしは基本シングルクォートを用いていますが、コーディング規約や統一感を優先させていいレベルですね。
結論
わたくしとしては、「echoとprint」の項のHTMLタグ内にPHPを記述する書き方の方が、エスケープや引用符の問題等も起きないためお勧めです。
ただ、それぞれメリットやデメリットはあるかと思いますので、それぞれのやり方でよろしいかとは思います。
文字列の出力について、さまざまな使い方を見ていただき、適切な記述方法で効率アップに繋げましょう。
// ヒアドキュメント始まり
echo >>> EOM
正しくは
echo <<< EOM
かと思うのですが。
確かにそのとおりですね、記述を間違えており申し訳ありません。
修正させていただきました。
ご指摘いただきありがとうございます。
今後とも「flatFlag」をよろしくお願いいたします。