echoはテキストを出力します。文字列を出すならecho "Hello";、変数を含めるならecho "Hello, $name";、複数の値を続けて出すならecho $a, $b;と書きます。echoが出力したものは、ブラウザに表示されるページ、またはターミナルに表示されるテキストになります。
1行目は変数展開(ダブルクォートの中に変数を置く)、2行目は.演算子で文字列を連結、3行目はカンマで区切った3つの値を渡しています。3つとも同じような結果を出力します。
HTMLをechoする
Webページでは、echoはたいていHTMLを出力します。ブラウザはそのテキストを受け取り、タグを描画します。Runを押すと、Pageタブに描画結果が表示されます。
最後の行はシングルクォートを使っているので、class="note"のダブルクォートをエスケープする必要がありません。シングルクォートの中では変数が置き換えられないので、固定のテキストに使います。値が訪問者から来る場合(フォームやURL)は、HTMLを注入されないようにhtmlspecialcharsを通して出力してください。htmlspecialcharsのページを参照してください。
短縮echoタグ <?=
HTMLファイルの中では、<?= $value ?>が<?php echo $value; ?>の短縮形です。テンプレートが読みやすくなります。
短縮echoタグは常に使えます。もう1つの短縮タグ、phpを付けない<?は設定に左右されるので使わないでください。
複数の値と改行をechoする
echoは改行を付けません。ターミナルでは"\n"(ダブルクォートの中)か定数PHP_EOLを足します。HTMLでは、ソースの改行は見た目に何も影響しないので、<br>を使うか要素を分けます。
カンマでもドットでも出力は同じです。カンマの場合、echoは値を1つずつ順に出力し、ドットの場合、PHPはまず1つの文字列を組み立ててから出力します。改行については専用のページがあります:PHPの改行。
echoとprintの違い
printは古くからある兄弟分です。値を1つ出力し、常に1を返すので、式の中に書けます。echoは値をいくつでも受け取り、何も返しません。
echo | print | |
|---|---|---|
| 値 | 1つ以上、カンマ区切り | ちょうど1つ |
| 戻り値 | なし(文である) | 1 |
| 式の中で使う | できない | できる、$ok = print "x"; |
| よくある用途 | ほぼすべて | まれ |
printfはまた別物で、printf("%05.2f", 3.14159)のようにプレースホルダーで値を整形します。sprintfのページで扱っています。
配列やオブジェクトをechoする
echoが出力できるのは、文字列と、文字列に変換できる値(数値、真偽値、null)だけです。配列は変換できません。自分の環境のPHPでは警告とArrayという単語が表示されます。
PHP Warning: Array to string conversion in /home/index.php on line 3
Array
中身を表示するには、目的に合った関数を選びます。
オブジェクトはもっと厳しく、クラスに__toString()が定義されていなければ、echo $object;はError: Object of class User could not be converted to stringでスクリプトを止めます。真偽値もよく驚かれる点で、echo true;は1を出力し、echo false;は何も出力しません。正確な型と値を確認したいときはvar_dump($value)を使います。
よくあるミス:括弧とカンマを使ったecho
echoが関数のように見えるので、echo("a", "b");と書いてしまうことがあります。括弧は1つの式を囲むだけなので、これは構文エラーです。
PHP Parse error: syntax error, unexpected token "," in /home/index.php on line 2
括弧を外す(echo "a", "b";)か、値を連結します(echo("a" . "b");)。printも同じで、括弧があってもなくても2つ目の値は受け付けません。
よくある質問
PHPのechoとprintの違いは何ですか?
どちらも文字列を出力します。echoはカンマ区切りで複数の値を受け取れ(echo $a, $b;)、何も返しません。printは値を1つだけ受け取り、1を返すので式の中で使えます。実際にはほとんどの場面でechoが使われます。
echoに括弧は必要ですか?
不要です。echoは関数ではなく言語構造なので、echo "Hi";が普通の書き方です。echo("Hi");は括弧が1つの式をまとめているだけなので動きますが、echo("a", "b");は構文エラーです。
echo falseで何も表示されないのはなぜですか?
echoは値を文字列に変換し、falseは空文字列""に、trueは"1"になります。真偽値そのものを見たいときは、var_dump($x);(bool(false)と表示)かecho var_export($x, true);(falseと表示)を使います。
PHPの<?=とは何ですか?
<?= $value ?>は短縮echoタグで、<?php echo $value; ?>とまったく同じです。PHP 5.4以降は常に有効で、HTMLテンプレートの中で値を出力するときの定番です。