PHPのechoを使うと、変数の値や文字列をブラウザに表示できます。このガイドでは、変数出力の最小例から文字列結合・HTMLエスケープ・Laravel Bladeとの違いまでを解説します。
変数を表示する最小例
PHPで変数を画面に出力するには、echoの後に変数名を書くだけです。
$name = "山田太郎";
echo $name; // 山田太郎
これが php echo 変数 の最もシンプルな形です。括弧は不要で、echoは関数ではなく言語構造(statement)として動作します。
echoの基本的な使い方
PHPにおけるechoは、文字列や変数の値を出力するために使用されます。echoは文(statement)であり、関数と異なって括弧で囲む必要がないため、以下のように使うことができます。
echo "Hello, World!";
echo "<br>";
この例では、画面に「Hello, World!」と表示され、その後にHTMLの<br>タグで改行が挿入されます。
文字列と変数を組み合わせる
変数の値をそのまま出力するだけでなく、文字列と組み合わせることもよく行います。PHPには主に2つの方法があります。
ダブルクォート内での変数展開
ダブルクォート(")で囲んだ文字列の中に変数を直接書くと、変数の値が自動的に展開されます。
$name = "太郎";
echo "こんにちは、$name!"; // こんにちは、太郎!
// 変数名が続く文字と区別したいときは {} で囲む
echo "こんにちは、{$name}さん!"; // こんにちは、太郎さん!
シングルクォート(')では変数が展開されないため注意が必要です。
echo 'こんにちは、$name!'; // こんにちは、$name!($name がそのまま出力される)
文字列結合(.演算子)
PHPではドット(.)を使って文字列と変数を連結することができます。これにより動的な出力が容易に行えます。
$greeting = "Hello";
$name = "Carol";
echo $greeting . ", " . $name . "!";
上記のコードでは「Hello, Carol!」と表示されます。この方法は、変数の値に基づいて動的なコンテンツを作成する際に便利です。
HTML内での出力
HTMLタグと組み合わせて変数を出力することもできます。
$name = "太郎";
// ダブルクォートで変数を展開しながらHTMLタグを出力
echo "<p>こんにちは、{$name}さん!</p>";
// ドット演算子で連結する方法
echo "<p>こんにちは、" . $name . "さん!</p>";
変数を表示する
echoを使って変数から内容を表示するのも非常に簡単です。変数を直接echo内で指定します。
$name = "Alice";
echo $name;
上記のコードでは、変数$nameの値である「Alice」が出力されます。
複数の値を一度に表示する
echoを使って複数の文字列や変数を同時に表示することも可能です。これにはカンマ区切りで値を連結する方法を使います。
$firstName = "Bob";
$lastName = "Smith";
echo $firstName, " ", $lastName;
この例では「Bob Smith」のようにフルネームが出力されます。
HTMLと組み合わせる
PHPのechoはHTMLコードを出力する際に利用されます。これは、ブラウザ上で動的にHTMLを生成するために非常に重要です。
echo "<h1>Welcome to my website</h1>";
このコードは、HTMLの見出し1タグを使用して「Welcome to my website」を大きな文字で表示します。
HTMLエスケープが必要な場面
ユーザーが入力した値をそのままechoで出力すると、XSS(クロスサイトスクリプティング)攻撃を受ける可能性があります。外部から受け取った値を表示する場合は、必ずhtmlspecialchars()でエスケープしてください。
// 危険:ユーザー入力をそのまま出力(XSSの危険あり)
echo $_GET['name'];
// 安全:htmlspecialchars() でエスケープしてから出力
echo htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');
htmlspecialchars()は <、>、&、"、' などのHTML特殊文字を無害なエンティティに変換します。ユーザー入力を扱う際は常にエスケープを忘れないようにしましょう。
printとの違い
printもPHPで値を出力する命令ですが、echoとの主な違いは次の通りです。
| echo | ||
|---|---|---|
| 戻り値 | なし | 常に 1 |
| 複数引数 | ○(カンマ区切りで複数指定可) | ×(1つのみ) |
| 速度 | わずかに速い | わずかに遅い |
通常のWebページ開発ではechoを使うのが一般的です。printは式として評価できる(戻り値が1)ため、条件式の中で使いたい場面に限定されます。
// echo:複数の値をカンマ区切りで渡せる
echo "Hello", " ", "World";
// print:引数は1つのみ
print "Hello World";
エスケープシーケンス
テキスト内でダブルクォートや特定の文字を出力する必要がある場合、エスケープシーケンス(\)を使います。これは特にHTMLや特殊文字が含まれる場合に有効です。
echo "She said, \"It's a beautiful day!\"";
この文では「She said, "It’s a beautiful day!"」という出力が得られます。
複雑な出力のためのheredocとnowdoc
echoで長い文字列や複雑なテキストを出力する場合、heredocやnowdoc構文が便利です。
Heredoc
$name = "Dave";
echo <<<EOT
<h2>Welcome, $name!</h2>
<p>We're glad to have you with us.</p>
EOT;
heredocにより、コード中に分かりやすく長いテキストの塊を挿入でき、変数もそのまま展開されます。
Nowdoc
今度は変数を展開せずにそのまま表示したい場合、nowdocを用います。
echo <<<'EOT'
<p>This is a nowdoc example.</p>
EOT;
nowdocでは変数$nameはそのまま$nameとして表示されます。
出力バッファリング
出力バッファリングを活用すると、出力を一時的に保存して後で処理することが可能です。プロジェクトのパフォーマンスを向上させるのに役立ちます。
ob_start();
echo "This is buffered output.";
$output = ob_get_clean();
echo strtoupper($output);
この例では、ob_start()でバッファリングが開始され、ob_get_clean()でバッファ内容が取得されてクリアされます。その後、文字を大文字に変換した結果が表示されます。
Laravel Bladeでの変数表示
LaravelのBladeテンプレートエンジンでは、PHPのechoの代わりに {{ }} 構文を使います。
{{-- 変数を安全に出力(htmlspecialchars 相当が自動適用される) --}}
{{ $name }}
{{-- HTMLをそのまま出力したい場合(XSSに注意) --}}
{!! $htmlContent !!}
{{ $name }} は自動的にhtmlspecialchars()相当のエスケープを適用するため、XSSを防げます。PHPの素のechoと異なりエスケープが自動化されている点が最大の違いです。Laravelプロジェクトでテンプレートに変数を出力する場合は、基本的に {{ }} を使いましょう。
結論
echoはPHPの基本となる出力方法ですが、さまざまな方法で利用することができ、特に動的なWebページの生成に不可欠です。変数や文字列、HTMLの表示や出力バッファリングを理解し、適切に活用することでPHPによるページ生成の幅が大きく広がります。転送したいデータの性質や目的に応じて、適切な方法を選びましょう。
よくある質問(FAQ)
PHPで変数を表示するには?
echoの後に変数名を書くだけです。
$name = "太郎";
echo $name; // 太郎
echoで文字列と変数をつなげるには?
ドット(.)で連結するか、ダブルクォート内に変数を直接書く方法があります。
$name = "太郎";
// 方法1: ドット演算子で連結
echo "こんにちは、" . $name . "さん!";
// 方法2: ダブルクォート内で展開
echo "こんにちは、{$name}さん!";
Bladeではどう表示する?
LaravelのBladeテンプレートでは {{ $変数名 }} を使います。自動でXSSエスケープが適用されるため安全です。
{{ $name }}

コメント