 
        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」をよろしくお願いいたします。