gotohayato.com

moon indicating dark mode
sun indicating light mode

PHP の echo と print のちがいと使いどころ

2015/07/04PHP

PHP には echoprint という 2 つのよく似た出力用機能が備わっています。

ことあるごとに調べては忘れ、調べては忘れの繰り返しなので、備忘録として書き留めておきます。

ひとことでいうと、 echoprint の最も大きなちがいは「式」( expression )かどうか です。 言語の仕様として「 echo は式ではない、 print は式である 」ということになっているそうです。 つまり

  • echo は文( statement )なので他の式や文の一部として使うことができない。 print は式( expression )なので他の式や文の一部として使うことができる。
  • echo は戻り値を持たない。 print は戻り値を持つ(戻り値は 1 )。

とのこと。

たとえば、わかりやすい例は if 文です。 echoif 文の中に入れることはできませんが print の場合は可能です。

// echo の場合
// × エラー Parse error
if (echo 5) {
print 'echo is an expression with return value';
}
// print の場合
// ◯ こちらは問題なく動作する
if (print 5) {
print 'print is an expression with return value';
}

printif 文以外でも他の式に組み込むことができます。

// ◯ print は他の式や文の要素として利用できる
$result = 10 + (print 3) + (print FALSE);
print $result; // => 12
// × エラー Parse error
$result = (echo 3);

ちなみに、 print の戻り値は必ず 1 になることに注意が必要です。 例えば、 print FALSE とした場合でもその戻り値は 1 になります。 このあたりは Ruby の pputs のようなふるまいを期待すると裏切られます。

となると echo にはメリットが無いようにも思えます。 が、 echo でできて print ではできないこととして「複数の引数を受け取ること」があります。 echo は複数の引数を受け取れますが print は単一の引数しか受け取れません。

// echo の場合
// ◯ こちらは問題なく動作します
echo 3, 4, 5; // => 345
// print の場合
// × エラー Parse error
print 3, 4, 5;

ちなみに、 echo $a, $b, $c の出力は echo $a . $b . $c と同じように見えますが、引数を連結してから出力しているのではなく echo $a; echo $b; echo $c; と 3 度呼び出しているのと同等の意味合いになるようです。

このあたりについてはすでに多くの人が説明されていますが、個人的にわかりやすかったのは次の Stack Overflow のページです。 興味のある方はご覧になってみてください。

ちなみに、 echoprint も見た目上は関数のように見えますが、いずれも関数ではないとのこと。 また、変数表示の短縮形である <?= は内部的には echo として扱われているとのことです。

あと、パフォーマンス面でのちがいとして「 echo の方が戻り値を持たない分 print よりも高速だ」と言われたりしていますが、ここは気にしても仕方がないくらいのわずかなちがいのようです。

まとめます。

  • echoprint のちがいは「式かどうか」。 echo は式ではなく print は式である。
  • echoprint も関数ではなく言語構成( language structure )である。
  • echo の方がちょっとだけ高速だけど実用上気にするほどの差はない。

ちなみに、 PHP では echoprint の他にも、 exit()die()implode()join() など実用上大差のない機能が複数用意されています。 私は Ruby や Python を学んだ後に PHP を学んだためか、この「ほとんど同じツールが複数用意されていること」に若干の気持ち悪さを感じます。

余談ですが、上掲の Stack Overflow の記事の中で「ゴリラとサメはどちらが強い?」風の議論に関するメタな説明をした記事が紹介されており、こちらもとてもおもしろいです。 興味のある方はご覧になってみてください。

関連記事


後藤隼人
個人事業でウェブ開発やマーケティングをしています。
GitHub