この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:6
ページ更新者:T
更新日時:2026-06-11 07:12:00

タイトル: printとechoの違い
SEOタイトル: PHP print vs echo 完全比較ガイド

この記事の要点
  • echo は言語構造print は関数のような式(厳密には言語構造)
  • echo $a, $b, $c のようにカンマで複数引数を渡せるのは echo のみ
  • print($x)戻り値 1 を返すので式中で使える。echo は戻り値なし
  • 性能は echo がわずかに高速だが実用差は皆無。可読性で選ぶ
  • 実務では <?= $var ?> 短縮タグ + テンプレートエンジン (Blade/Twig){{ $var }}

結論: 基本は echo を使う

「ほぼ同じ。echo を使えば良い」が結論です。理由は以下のとおり。

  • echo はカンマで複数引数を渡せる(連結より高速)
  • print は戻り値 1 がある(式中で使える)が、用途は稀
  • 性能差は事実上ない

echo と print の比較表

項目echoprint
分類言語構造言語構造(関数式扱い可)
戻り値なし常に 1 (int)
複数引数echo $a, $b, $c OKNG(1 引数のみ)
速度わずかに高速わずかに遅い(戻り値処理)
括弧付けない(付けると複数引数不可)付けても付けなくても可
三項演算子・式中使えない使える
使用頻度圧倒的多数少数

基本的な使い方

// echo - 基本
echo 'Hello';
echo 'Hello', ' ', 'World';   // 複数引数 OK
echo $name;
echo &quot;Name: $name\n&quot;;

// print - 基本
print 'Hello';
print('Hello');               // 括弧付けても可
print &quot;Name: $name\n&quot;;

// ❌ print は複数引数 NG
print 'Hello', 'World';        // Parse error

戻り値の違い(print は 1 を返す)

// print は戻り値 1
$result = print 'Hello';
echo $result;        // 1

// 三項演算子の中で使える
$loggedIn ? print 'Welcome' : print 'Please login';

// 論理式の中で使える(あまり推奨されない)
$ok &amp;&amp; print &quot;OK\n&quot;;

// echo はこれができない
$result = echo 'Hello';   // Parse error
$ok &amp;&amp; echo &quot;OK\n&quot;;       // Parse error

性能比較

「echo は print より速い」とよく言われますが、1 億回ループしても差は数百ms 程度。実用上は誤差です。

// ベンチマーク例 (参考程度)
$n = 1_000_000;

$t1 = microtime(true);
for ($i = 0; $i < $n; $i++) echo '';
$echoTime = microtime(true) - $t1;

$t2 = microtime(true);
for ($i = 0; $i < $n; $i++) print '';
$printTime = microtime(true) - $t2;

printf("echo : %.3fs\n", $echoTime);
printf("print: %.3fs\n", $printTime);

// 出力例
// echo : 0.054s
// print: 0.061s
// → 1 回あたり 数十ナノ秒。気にする必要なし

連結 vs 複数引数(echo の高速化テク)

連結 (.) よりカンマで複数引数の方が高速です(文字列を内部で連結しないため):

// ❌ 遅い: 連結
echo 'Hello, ' . $name . ', age ' . $age . "\n";

// ✅ 速い: 複数引数(echo のみ可能)
echo 'Hello, ', $name, ', age ', $age, "\n";

// ✅ 文字列補間 (ダブルクォート)
echo "Hello, $name, age $age\n";

// ✅ heredoc (複数行のテンプレート)
echo <<<HTML
<div>
  <p>Hello, $name</p>
</div>
HTML;

printf / sprintf でフォーマット

// printf - フォーマットして出力
printf(&quot;Hello, %s. You are %d years old.\n&quot;, $name, $age);

// sprintf - フォーマットして文字列で返す(出力しない)
$msg = sprintf(&quot;Hello, %s. You are %d years old.&quot;, $name, $age);
echo $msg;

// 主なフォーマット指定子
%s   // 文字列
%d   // 整数
%f   // 浮動小数
%.2f // 小数点以下 2 桁
%05d // 5 桁ゼロパディング
%x   // 16進数
%%   // % 自体

// vsprintf - 配列を引数として渡す
$msg = vsprintf(&quot;Hello, %s. Age %d.&quot;, [$name, $age]);

短縮タグ (テンプレート)

HTML テンプレート内では <?php echo ... ?> ではなく短縮タグ <?= ... ?> が定番です。PHP 5.4+ では short_open_tag 設定に依らず常に有効:

<!-- ❌ 冗長 -->
<h1><?php echo $title; ?></h1>
<p><?php echo htmlspecialchars($desc, ENT_QUOTES, 'UTF-8'); ?></p>

<!-- ✅ 短縮タグ -->
<h1><?= $title ?></h1>
<p><?= htmlspecialchars($desc, ENT_QUOTES, 'UTF-8') ?></p>

<!-- セミコロンは省略可(タグ末尾) -->
<?= $foo ?>

Laravel Blade / Twig での書き方

{{-- Blade (Laravel) --}}
<h1>{{ $title }}</h1>            {{-- 自動 htmlspecialchars --}}
<div>{!! $rawHtml !!}</div>      {{-- エスケープなし(XSS 注意) --}}

{{-- Twig (Symfony) --}}
<h1>{{ title }}</h1>
<div>{{ rawHtml|raw }}</div>

{{-- echo 系命令は不要。テンプレートエンジンが裏で echo 相当を呼ぶ --}}

出力バッファリング

echo / print の出力を一旦バッファに溜めて後で取り出せます:

ob_start();              // バッファ開始
echo 'Hello, World';
$captured = ob_get_clean();   // 取り出してバッファ終了

echo $captured;          // Hello, World

// HTTP ヘッダー送信後に echo すると &amp;quot;headers already sent&amp;quot; エラー
// → ob_start() で防げる
ob_start();
echo 'something';
header('Location: /redirect');   // OK (まだ出力されていない)
ob_end_flush();

FAQ

Q: print と echo どちらが速い?
A: 厳密には echo がわずかに速いですが、1 万回ループで数 ms の差。可読性で選んでください。

Q: print に括弧を付けるのは関数だから?
A: いいえ、print は言語構造です。括弧は任意。print(&quot;Hello&quot;)print &quot;Hello&quot; は等価。

Q: echo $a $b と空白区切りで書ける?
A: 不可。カンマ echo $a, $b または連結 echo $a . $b

Q: print_r や var_dump とは違う?
A: 全く違います。print_r / var_dumpデバッグ用の構造化出力で、配列やオブジェクトを再帰的に表示します。echo/print は単純出力。