クマのブログ

つまづいたところ、学びを書いていきます

【何が違うの?】PHPの"echo"と"print"

初めに

きっかけ

・業務のPHP研修中に

"echo"と"print"は厳密にいうと違いがある。

と恥ずかしながら初めて知ったのでメモ。

・元々PHPを使った個人開発経験はあったが、当時の成果物レベルでは"echo"を使おうが"print"を使おうが、どちらでもよかった。

・当時サボった分をここで取り戻そうということで、色々調べました。 (さすがに先人の方々がたくさん記事を書いておられました。)

公式マニュアルによると…

公式マニュアル:echo

・echo — 1 つ以上の文字列を出力する

・print との主な違いは、 echo がリスト形式の引数を受け付け、返り値を持たないことです。

公式マニュアル:print

・print — 文字列を出力する

・echo との主な違いは、 print が単一の引数のみ受け付け、常に 1 を返すことです。

実例①

例えば研修の教材で見たのは以下のような例。

<?php

echo "(1)私の趣味は" . "(2)テニスです。"; // ← syntax error ではない

print "(1)私の趣味は" . "(2)テニスです。"; // ← これは syntax error

?>

これは上記マニュアルに書いてある通り

"echo"は 1 つ以上の文字列を出力するのに対し、

"print"は単一の文字列しか出力しない

という違いがあるためです。

上記の例文は(1), (2)の2つの文字列がありますよね。

実例②

もう一つ"echo"と"print"の違いがわかる例文が後述する参考記事に記載がありました。

<?php

echo print "こんにちは" ; // ← syntax error ではない

print echo "こんにちは" ; // ← これは syntax error

?>

これは正直理解しきれているか不安ですが、

"echo"は複数の引数を受け付けるのに対して

"print"は単一の引数しか受け受けないことに起因しているのかな、と思います。

※記事を見ても僕が理解しきれなかったため、理解したタイミングでブレストしますm(__)m

↑こちらはもう少し理解できたので、まとめます。

ココで違いが生じる原因はズバリ、文章であるか、式であるかという違いに起因します。

echo:「~を出力する」という文=返り値を持たない

print:「~を出力する」という文=返り値を持つ

この知識を踏まえてもう一度先ほどのコードを見ると

<?php (1)echo (2)print "こんにちは" ; ?>  // ← syntax error ではない

コチラは

「(2) printの式の結果"こんにちは"を、(1) 出力する」

という文です。もっと短くすると

「(2) 式を、(1) 出力する」

となり、日本語的にも意味が通る。

<?php (3) print (4) echo "こんにちは" ; ?>  // ← これは syntax error

一方、こちら。

「(4) echoで"こんにちは"を出力し、(3) (4)の式(?)の結果を出力する」

という文になり、もっと短くすると

「(4) 出力し、(3) 式を出力する(?)」

と何とも無理やりな感じがする。

突っ込みどころとしては

そもそも(4)は出力することで、「文」として一区切りしている。

にもかかわらず、それを「式」として出力しようとしている点で矛盾が生じる。

ということで、エラーが生じるということになります。

参考資料

参考(Qiita)

所見

僕が2つの実例を知って思ったのは

「ただ、出力するだけなら変なsyntax error出ない"echo"のがいいじゃん」

でした。

参考記事の執筆者さん(PHPの記事でよく見かけるつよつよのお方…)も"echo"推しなので、基本"echo"使おうと思います。

以上、ご拝読ありがとうございました!