# ch04 — HTML と PHP の共存

Source: https://php-school.pages.dev/topics/hello/ch04-html-mix/
Site: AIと学ぶPHPの学校 (https://php-school.pages.dev)
Lesson: PHPをはじめよう
Level: L1

Reference (official): https://www.php.net/manual/ja/language.basic-syntax.php

## 本文

# ch04 — HTML と PHP の共存

## 概要

PHP は元々「Personal Home Page Tools」という名前で、**HTML の中に部分的にプログラムを差し込んで動的なページを作る** ための道具として 1995 年に生まれた。本格的な Web アプリを支える言語に育ったあとも、**「HTML がベースで、必要なところだけ `<?php ?>` で囲んでスクリプトに切り替える」** という設計思想は文法の根っこに残っている。

---

具体的には、`.php` ファイルの中で `<?php ?>` タグの **外側** に書いた文字はそのまま出力され、**内側** だけが PHP として実行される。しかも `<?php ?>` ブロックは **1 つのファイルに複数置ける** ので、HTML の途中に何度でも処理を差し込める。`<h1>こんにちは <?php echo $name; ?> さん</h1>` のような書き方が成立するのはこの仕組みのおかげだ。なお `?>` 直後の改行 1 つは PHP の仕様で自動的に消える、というクセも覚えておくと混乱しない。

---

現代の実務では Twig や Blade のような **テンプレートエンジン** を間に挟むのが主流で、`<?php ?>` をベタ書きする機会は減っている。ただしそれらも内部ではこの「HTML と PHP の混在」を整理した上に成り立っているので、もとの形を一度自分の手で書いておくと、後でフレームワークを学んだときに **裏で何が起きているか** が見える。

## 学習目標

- `.php` ファイルの中に HTML と PHP を混ぜて書ける
- `<?php ?>` タグの **外側** に書いた文字はそのまま出力されると理解する
- `<?php ?>` ブロックを **複数** 置ける

## 所要時間

スライド 3 分 + ドリル 2 問 = **10 分**

## ドリル

| no | 内容 |
|---|---|
| 01 | HTML テキストと `<?php echo ?>` を 1 ファイルに書く |
| 02 | `<?php ?>` ブロックを複数置く |

## 採点

```bash
php scripts/grade.php topics/hello/ch04-html-mix/drill/01-mix/
```

## 関連チャプター

- [`ch02-write-program`](../ch02-write-program/) — `<?php ?>` と `echo` (このチャプターの前提)
- [`ch03-comments`](../ch03-comments/) — コメントの書き方
- [`ch05-variables`](../ch05-variables/) — HTML の中に変数を埋め込む準備

## スライド

---
marp: true
theme: dojo
paginate: true
size: 16:9
---

<!--
LLM_CONTEXT:
  Lesson 1 / Chapter 4
  目的: .php ファイル内で HTML と PHP を混在させ、複数の <?php ?> ブロックを置けるようにする
  扱わない: 変数 (ch05) / 短縮タグ <?= (後続章) / フォーム POST (後続)
  読み上げ時間目安: 3 分
-->

# HTML と PHP の共存

Lesson 1 / Chapter 4

---

## `<?php ?>` の外は「そのまま出力」

```php
こんにちは
<?php
echo "PHP からの出力\n";
?>
おわり
```

実行結果:

```
こんにちは
PHP からの出力
おわり
```

- `<?php ?>` の **外** は文字としてそのまま出る
- `<?php ?>` の **中** だけが PHP として実行される

---

## HTML と混ぜて書ける

```php
<h1>タイトル</h1>
<p>
  今日は <?php echo "晴れ"; ?> です。
</p>
```

実行結果:

```
<h1>タイトル</h1>
<p>
  今日は 晴れ です。
</p>
```

- `.php` ファイルの中身は **HTML + PHP** で OK
- PHP の出力したい場所だけ `<?php ?>` で囲む

---

## `<?php ?>` は複数置ける

```php
名前: <?php echo "Taro"; ?>

年齢: <?php echo "20"; ?>
```

実行結果:

```
名前: Taro
年齢: 20
```

- `<?php ?>` ブロックは 1 ファイルに **いくつでも** 置ける
- 注意: `?>` の直後の **改行 1 つ** は PHP に食われる
  → 改行を出したい時は空行をもう 1 つ入れる

---

## ファイル末尾の `?>` は省略してよい

```php
<?php

echo "本文\n";
```

- ファイル全体が PHP の場合、末尾の `?>` は **書かなくてよい**
- むしろ書かない方が安全 (`?>` の後ろに空白が混ざると出力が壊れる)
- HTML と混ざるファイルでは `?>` を書く

---

## このチャプターでできるようになること

✅ `.php` の中に HTML と PHP を混ぜられる
✅ `<?php ?>` の外はそのまま出ると理解している
✅ `<?php ?>` ブロックを複数置ける

→ ドリルへ
