序文
echo / print とは
PHP以外でも古くから、LinuxコマンドやC言語など様々な場所で存在する標準出力系の命令。
ブラウザやシステムに対して「とにかく文字列を出力する」ということをしてくれる。
echo / print について各所で調べると解説記事が散在するようなので、自分用に下記でまとめています。
PHPでは echo / print どっちを使うべきか?
結論から言うとどちらでも良いようです。(・・・というと元も子もない感じがあるので、記事の最後に筆者の見解を示しています。)
仕様が少しだけ違いますが、自分の狭い観測範囲ではそのために使い分ける場面はほとんどないので、使い分ける場面に遭遇したらまた記事は更新します。
echo / print を使っている人の理由をそれぞれ確認すると「初めて使ったのが echo だったから」「最初に読んだ本のサンプルプログラムでは print だったから」というものが多い印象。
echo と print は、PHPマニュアル上はどちらも「String 関数」のくくりになっていますが、両者ともに厳密には「関数」ではなく「言語構造」(PHPという言語を構成する要素そのもの。他にifやarray()やuseやissetなどがある)ということには注意が必要です。
PHPマニュアル: String 関数
PHPマニュアル: キーワードのリスト
本題
echo の仕様
PHPマニュアル: echo — 1 つ以上の文字列を出力する
echo ( string $arg1 [, string $... ] ) : void
すべてのパラメータを出力します。末尾に改行を付加することはありません。
echo は実際には関数ではありません (言語構造です)。このため、使用する際に括弧は必要ありません。 (いくつかの他の言語構造と異なり) echo は関数のように動作しません。
echo には、開始タグの直後に等号を付ける短縮構文もあります。
I have <?=$foo?> foo.
print との主な違いは、 echo がリスト形式の引数を受け付け、返り値を持たないことです。
print の仕様
print ( string $arg ) : int
arg を出力します。
printは実際には関数ではありません (言語構造です)。このため、引数を括弧で括る必要はありません。
echo との主な違いは、 print が単一の引数のみ受け付け、常に 1 を返すことです。
というわけで両者の違い
echoのマニュアルには行末に void
とあり、printのマニュアルには行末に int
とありますが、これはechoが返り値を持たず、printは返り値で常に1を返すことを端的に表しています。
echoは値を持ったり返したりすることはできないため、条件分岐などで式として扱えませんが、printには返り値があるため式として利用することが可能です。
PHPの言語仕様によると、式の定義は「値のあるもの全て」だそうです。
下記で、printとechoを式として使えるかどうかの簡単な例を記述しました。
if (print '') {
print 'OK';
} else {
print 'NG';
}
// 出力結果 OK
if (echo '') {
echo 'OK';
} else {
echo 'NG';
}
// echoは返り値がない=値を持たない=式ではないので、こちらはパースエラーになる
違いとして他には、引数として受け付け可能な数も異なり、echoでは複数の文字を引数として与えることができますが、printでは単一の引数のみ受け付けるようになっています。
例えば複数の文字列を扱いたいときに .
(ドット) で連結することが多いかと思いますが、echoでは ,
(カンマ) で区切ることによって第一引数、第二引数を指定して、複数の文字列の指定が可能だということです。
echo 'A','B'; // カンマ使用 → 出力結果 AB
echo 'A'.'B'; // ドット使用 → 出力結果 AB
print 'A'.'B'; // ドット使用 → 出力結果 AB
print 'A','B'; // printでカンマを使って複数の文字列を出力しようとするとエラーになる
echoを単体で使用する場合は、省略して書くやり方もあります。
例えばHTMLファイル上で部分的にechoを使用したいとき、 <?= ?>
のタグで囲ってあげて省略記法とすることができます。
これはPHP5.4.0未満のバージョンでは設定オプションshort_open_tag を有効にしないと使えませんが、5.4.0以降であればデフォルトで使えます。
key : <?='value'; ?> // 出力結果 key : value
ちなみに筆者は、echo派です。
printよりもechoの方がタイピングが少なくて済むため。
printは返り値があり関数的な振る舞いをする分、echoより処理速度が遅いとも言いますが、100万回くらいのprintとechoを実行したときに0.01秒の差が出るかどうかという程度のようです。(ただし出典のリンクが散逸してしまったので話半分に読んでいただければ。)
要するに慣れた方を使うか、現場のコーディング規約に従うかすれば問題ないであろうと思います。
参考URL
PHPの言語構造とは
PHPのechoとprintは言語構造だというけど、言語構造とは何か
var_export — 変数の文字列表現を出力または返す
var_dumpよりログ作成に便利なvar_export
echoコマンドの詳細まとめました【Linuxコマンド集】
PHPの省略記法
【bash】 echoとprintfの違い
PHP の echo と print のちがいと使いどころ
echo,print,printfの違い
あなたは『echo』派?それとも『print』派?
【PHP】echoとprintfとsprintfの違い
【PHP超入門】式・文・構文・言語構造・制御構造について