ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
結論: 基本は echo を使う
「ほぼ同じ。echo を使えば良い」が結論です。理由は以下のとおり。
- echo はカンマで複数引数を渡せる(連結より高速)
- print は戻り値 1 がある(式中で使える)が、用途は稀
- 性能差は事実上ない
echo と print の比較表
| 項目 | echo | |
|---|---|---|
| 分類 | 言語構造 | 言語構造(関数式扱い可) |
| 戻り値 | なし | 常に 1 (int) |
| 複数引数 | echo $a, $b, $c OK | NG(1 引数のみ) |
| 速度 | わずかに高速 | わずかに遅い(戻り値処理) |
| 括弧 | 付けない(付けると複数引数不可) | 付けても付けなくても可 |
| 三項演算子・式中 | 使えない | 使える |
| 使用頻度 | 圧倒的多数 | 少数 |
基本的な使い方
// echo - 基本
echo 'Hello';
echo 'Hello', ' ', 'World'; // 複数引数 OK
echo $name;
echo "Name: $name\n";
// print - 基本
print 'Hello';
print('Hello'); // 括弧付けても可
print "Name: $name\n";
// ❌ print は複数引数 NG
print 'Hello', 'World'; // Parse error
戻り値の違い(print は 1 を返す)
// print は戻り値 1
$result = print 'Hello';
echo $result; // 1
// 三項演算子の中で使える
$loggedIn ? print 'Welcome' : print 'Please login';
// 論理式の中で使える(あまり推奨されない)
$ok && print "OK\n";
// echo はこれができない
$result = echo 'Hello'; // Parse error
$ok && echo "OK\n"; // 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("Hello, %s. You are %d years old.\n", $name, $age);
// sprintf - フォーマットして文字列で返す(出力しない)
$msg = sprintf("Hello, %s. You are %d years old.", $name, $age);
echo $msg;
// 主なフォーマット指定子
%s // 文字列
%d // 整数
%f // 浮動小数
%.2f // 小数点以下 2 桁
%05d // 5 桁ゼロパディング
%x // 16進数
%% // % 自体
// vsprintf - 配列を引数として渡す
$msg = vsprintf("Hello, %s. Age %d.", [$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 すると "headers already sent" エラー
// → 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("Hello") と print "Hello" は等価。
Q: echo $a $b と空白区切りで書ける?
A: 不可。カンマ echo $a, $b または連結 echo $a . $b。
Q: print_r や var_dump とは違う?
A: 全く違います。print_r / var_dump はデバッグ用の構造化出力で、配列やオブジェクトを再帰的に表示します。echo/print は単純出力。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- インストール方法
- 文法
- Composerのインストール
- 内部関数
- フレームワーク
- エラー一覧
- 改行出力
- printとechoの違い
- シングルクォートとダブルクォートの違い
- returnとyieldの違い
- var_dumpをログ出力
- CSV読み込み
- 待機・処理の遅延
- ログファイルにエラーを出力する方法
- エラーログ出力関数
- URLパラメータの配列化
- empty, is_null. issetの判定比較表
- httpステータスコードの付与
- バージョンの確認
- php.ini
- APIを呼び出す方法
- 外部ファイルを呼び出す方法
- カンマ区切りの文字列を配列に変換
- 配列からランダムに値を取り出す方法
- Webスクレイピング
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?