PHP

The PHP echo language construct outputs one or more strings. It’s not a function, so it has no return value; for safe HTML output, pair it with proper escaping like htmlspecialchars().

echo

echo は、文字列(および文字列に変換できる値)を出力するための 言語構文 です。テンプレートやデバッグで頻出ですが、実務では「そのまま出力してよい値か(XSS)」と「出力のタイミング(ヘッダ送信)」で事故が起きやすいので、基本の型と注意点をセットで覚えるのが安全です。

このページでできるようになること

まずは直感:echo って何?

ざっくり言うと echo は「レスポンス本文に文字を足す」ための命令です。画面に見えるHTMLを作るときも、APIでJSONを返すときも、最終的には“出力”が必要になります。

最小デモ:まず動かす

まずは echo の最小形と、複数引数(カンマ区切り)を体感します。

単発の出力

Hello, echo!

複数引数(カンマ)

ID: 42

注意:カンマは“連結”ではない

複数引数は echo 専用の書き方です。式としてまとめたいときは .(連結)を使います。

ID: 42

PHP

<?php
echo 'Hello, echo!';

$id = 42;
echo 'ID: ', $id;

基本の書き方(最短の型)

echo は文として書くのが基本です。関数ではないため、戻り値を前提にした書き方はしません。

PHP

<?php
echo 'text';
echo "text\n";

/* 複数引数(カンマ区切り) */
echo 'a', 'b', 'c';

/* 文字列連結(式にしたいとき) */
echo 'a' . 'b' . 'c';

正確な定義(仕様に沿った説明)

echo は関数ではなく言語構文(language construct)です。一般に次の性質を持ちます。

戻り値
なし(式として評価できる値を返さない)
引数
1つ以上の式をカンマ区切りで指定できる(複数引数)
括弧
echo ($x); のように書けるが、括弧を付けた形では複数引数が使えない(echo($a, $b) は不可)
型変換
文字列として出力される(数値は文字列化される、配列はそのままでは出せない)

配列やオブジェクトをデバッグ出力したい場合は、var_dump()print_r() を使います(ただし本番レスポンスに混ぜないのが基本です)。

<?= ?>(ショートエコータグ)

<?= $value ?><?php echo $value; ?> の短縮記法です。テンプレートで「値を1つ出す」用途に向きます。

PHP

<?php
/* 通常の書き方 */
echo $title;
?>

<!-- ショートエコータグ -->
<h1><?= $title ?></h1>

実務でよくある使用例(Webバックエンド)

HTML出力:必ずエスケープする(XSS対策)

ユーザー入力や外部データをHTMLへ出すときは、必ず htmlspecialchars() でエスケープします(HTML文脈)。

危険:そのまま出力

<script>alert(1)</script>

安全:HTMLとして無害化

&lt;script&gt;alert(1)&lt;/script&gt;

PHP

<?php
$userInput = '<script>alert(1)</script>';

/* HTML文脈の出力は htmlspecialchars が基本 */
echo htmlspecialchars($userInput, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');

JSONを返す:Content-Type と一緒に

PHP

<?php
header('Content-Type: application/json; charset=UTF-8');

$data = ['ok' => true, 'id' => 42];
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

APIでは「出す内容(JSON)」と「出すヘッダ(Content-Type)」をセットで扱うのが基本です。

テンプレを関数にする:出力バッファで文字列化

テンプレを“表示”ではなく“文字列として組み立てたい”場合は、出力バッファを使うと整理できます。

PHP

<?php
function renderTitle(string $title): string
{
    ob_start();
    ?>
    <h1><?= htmlspecialchars($title, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8') ?></h1>
    <?php
    return ob_get_clean();
}

echo renderTitle('Hello');

実務で起きがちな事故と回避策

症状:header() が効かない(headers already sent)

HTTPヘッダは、本文を出力する前に送る必要があります。先に echo(または空白・BOM・PHP閉じタグの後ろの文字)で出力が起きると、ヘッダ送信が失敗します。

症状:配列を echo してしまった

echo は配列をそのまま出せません。デバッグなら var_dump()、画面表示なら用途に合わせて整形してから出力します。

症状:連結の結果が想定と違う

連結演算子 . は、数値演算(+ など)より優先順位が低いことがあります。計算を混ぜるときは括弧で明示すると安全です。

PHP

<?php
echo 'sum=' . (2 + 3);     // 安全

print との違い

print も出力しますが、print は戻り値として 1 を返します(式として使える)。一方で、実務で「戻り値が必要」な場面は少なく、基本は echo で統一する方が読みやすいことが多いです。

echo
戻り値なし。複数引数(カンマ)を取れる。
print
戻り値が 1。引数は1つのみ。

試験対策ポイント(PHP技術者認定試験を意識)

まとめ:迷ったときの判断軸