初めに
きっかけ
・業務のPHP研修中に
"echo"と"print"は厳密にいうと違いがある。
と恥ずかしながら初めて知ったのでメモ。
・元々PHPを使った個人開発経験はあったが、当時の成果物レベルでは"echo"を使おうが"print"を使おうが、どちらでもよかった。
・当時サボった分をここで取り戻そうということで、色々調べました。 (さすがに先人の方々がたくさん記事を書いておられました。)
公式マニュアルによると…
・echo — 1 つ以上の文字列を出力する
・print との主な違いは、 echo がリスト形式の引数を受け付け、返り値を持たないことです。
・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)は出力することで、「文」として一区切りしている。
にもかかわらず、それを「式」として出力しようとしている点で矛盾が生じる。
ということで、エラーが生じるということになります。
参考資料
所見
僕が2つの実例を知って思ったのは
「ただ、出力するだけなら変なsyntax error出ない"echo"のがいいじゃん」
でした。
参考記事の執筆者さん(PHPの記事でよく見かけるつよつよのお方…)も"echo"推しなので、基本"echo"使おうと思います。
以上、ご拝読ありがとうございました!