PHP入門|Web制作者が最短で読み書きできる基礎とできること


PHPとは、Webサーバーの上で動き、HTMLを組み立ててブラウザへ返すプログラミング言語のことです。WordPressの本体とテーマはPHPで書かれており、single.phpfunctions.php を開いたときに並んでいる <?php から始まるコードがそれに当たります。

WordPressでサイトを作っていると、PHPに触れる場面は避けられません。テーマのテンプレートを少し直したい、プラグインの説明どおりにコードを貼りたい。ところが入門書の多くはPHPで一からWebアプリを作る前提で書かれていて、「目の前のテンプレートが読めるようになりたい」という目的に対しては遠回りになりがちです。

この記事では、PHPでできることを用途別に整理し、JavaScriptとの構文の違いを表で示したうえで、基礎文法を6つの練習問題で確かめます。練習問題はどれもコードを読んで出力を当てる形式です。PHPはブラウザだけでは動かないため、まず「読める」ところから始めるのが近道になります。同じ形式の問題を20問解ける練習アプリも用意しました。


PHPとは?HTMLの中で動くサーバー側の言語

PHPは1995年に登場したサーバーサイドの言語です。いちばんの特徴は、HTMLの中にそのまま書けることです。<?php?> で囲んだ部分だけがサーバーで実行され、その結果がHTMLに埋め込まれてブラウザに届きます。

<h1><?php echo "こんにちは"; ?></h1>
<p>今日は<?php echo date("n月j日"); ?>です。</p>

ブラウザに届くのは <h1>こんにちは</h1> のような実行後のHTMLだけで、PHPのコード自体は見えません。JavaScriptがブラウザの中で動くのに対して、PHPはブラウザに届く前にサーバーで動く。この違いを押さえておくと、この先の説明がすべて読みやすくなります。

利用規模も大きい言語です。W3Techsの調査(2026年9月時点)によると、サーバー側の言語が判明しているWebサイトの69.9%がPHPを使っています。その大きな理由がWordPressで、Web制作の現場でPHPを読む機会が多いのはこのためです。


PHPでできること

PHPが得意なのは、アクセスのたびに内容が変わるページを作ることです。Web制作者がよく出会う用途を4つに絞って紹介します。

WordPressのテーマを作る・直す

記事一覧・記事ページ・ヘッダーといったテーマのテンプレートは、すべてPHPファイルです。投稿データを取り出してHTMLに流し込む処理をPHPが担っています。テンプレートの役割は archive.phpの使い方とカスタマイズ で具体的に解説しています。

お問い合わせフォームを作る

フォームに入力された内容を受け取り、チェックしてメールで送る処理もPHPの定番です。入力値は $_POST で受け取ります。安全な作り方は PHPメールフォームの作り方 にまとめています。

ログイン機能を作る

会員ページのように「ログインした人だけに見せる」仕組みは、セッションとパスワードのハッシュ化で作ります。手順は PHPログイン機能の作り方 で解説しています。

データベースと連携する

商品一覧やお知らせのように、データベースに保存した情報を読み書きするのもPHPの役割です。登録・取得・更新・削除の基本は PHPでMySQLを操作する方法 で確認できます。

やりたいことPHPが担う処理主に使う機能
テーマを直す投稿データをHTMLに流し込むテンプレートタグ・ループ
フォームを作る入力の受け取り・チェック・送信$_POSTmb_send_mail()
ログインを作る本人確認と状態の保持session_start()password_hash()
DBと連携するデータの読み書きPDO

JavaScriptとPHPの違いを構文で見る

JavaScriptを書いたことがあれば、PHPの考え方はほぼそのまま使えます。変わるのは書き方です。特に間違えやすいものを表にしました。

やりたいことJavaScriptPHP
変数を作るlet name = "Taro";$name = "Taro";
文字列をつなぐ"Hello, " + name"Hello, " . $name
文字列に変数を埋め込む`Hello, ${name}`"Hello, {$name}"
画面に出すconsole.log(name)echo $name;
配列の要素数items.lengthcount($items)
キーつきのデータ{ name: "Taro" }["name" => "Taro"]
動く場所ブラウザサーバー

いちばん大きな違いは、変数名の頭に必ず $ が付くことと、文字列の連結が + ではなく .(ドット)であることです。また、PHPでは文の終わりのセミコロンを省略できません。書き忘れるとその場でエラーになります。


PHPを動かす環境を用意する

PHPのコードを実行するには、PHPが入ったサーバー環境が必要です。HTMLファイルのようにダブルクリックしてブラウザで開いても、PHPの部分は動きません。

パソコンにローカル環境を作る

もっとも手軽なのは、PHP・Webサーバー・データベースをまとめて入れられるMAMPやXAMPPです。手順は MAMPとXAMPPの導入方法 で解説しています。チームで同じ環境をそろえたい場合は Docker Composeで作るPHP・MySQLのローカル開発環境 が向いています。

PHP単体で動かしてみる

PHPだけがインストールされていれば、ターミナルからファイルを直接実行できます。PHPには開発用のWebサーバーも付属しているので、フォルダを指定するだけでブラウザから確認できます。

# ファイルを実行して結果をターミナルに出す
php hello.php

# 開発用サーバーを起動(http://localhost:8000 で確認)
php -S localhost:8000

とはいえ、文法を覚える段階では環境構築を後回しにしても問題ありません。この記事の練習問題とアプリは、コードを読んで結果を予想する形式なので、何もインストールせずに始められます。


基礎文法①:出力・変数・文字列

画面への出力には echo を使います。変数は $ で始まる名前に値を代入すると作られ、letconst のような宣言は要りません。

<?php
$name = "花子";
$age = 28;

echo $name . "さんは" . $age . "歳です";
echo "\n";
echo "{$name}さんは{$age}歳です";

どちらも「花子さんは28歳です」と出力されます。ダブルクォートの中では変数がそのまま展開されるため、2つ目の書き方のほうが読みやすくなります。"\n" は改行です。

差分チェックツールで効率UPお手本コードと自分のコードを比較して、違いを一目で確認できます。練習前にブックマークしておくと便利です。
Diff Checkerを開く →

練習問題1:echo と文字列の連結

次のコードを実行すると、何が出力されるでしょう?

<?php
$name = "Taro";
echo "Hello, " . $name . "!";

答え:Hello, Taro!

. で3つの文字列がつながります。JavaScriptの感覚で + を書くと、PHPでは数値の足し算として扱われ、意図した結果になりません。

練習問題2:シングルクォートとダブルクォート

同じ変数を2種類のクォートで囲んでいます。出力はどうなるでしょう?

<?php
$item = "りんご";
echo '好物は$itemです';
echo "\n";
echo "好物は{$item}です";

答え:1行目は「好物は$itemです」、2行目は「好物はりんごです」

変数が展開されるのはダブルクォートの中だけです。シングルクォートは書いた文字がそのまま出ます。テンプレートの中で変数が表示されないときは、まずクォートの種類を確認してください。


基礎文法②:計算と条件分岐

四則演算の記号はJavaScriptと同じです。条件分岐も ifelseifelse と、波かっこを使った見慣れた形で書けます。

<?php
$price = 1200;
$tax = $price * 0.1;

if ($price + $tax >= 1000) {
    echo "送料無料";
} else {
    echo "送料500円";
}

JavaScriptの else if はPHPでは elseif と1語で書くのが一般的です(else if と2語で書いても動きます)。

練習問題3:割り算と余り

3種類の割り算を並べています。それぞれ何が出力されるでしょう?

<?php
echo 7 / 2;
echo "\n";
echo intdiv(7, 2);
echo "\n";
echo 7 % 2;

答え:3.5、3、1

/ は割り切れなければ小数を返します。整数の商がほしいときは intdiv()(小数点以下を切り捨て)、余りは % です。ページ数の計算などで使い分けます。

練習問題4:if / elseif / else

$score が75のとき、何が出力されるでしょう?

<?php
$score = 75;
if ($score >= 80) {
    echo "A";
} elseif ($score >= 70) {
    echo "B";
} else {
    echo "C";
}

答え:B

条件は上から順に調べられ、最初に当てはまった1つだけが実行されます。75は80未満で70以上なので「B」です。


基礎文法③:繰り返しと配列

配列は [] で作り、キーつきの配列(連想配列)は キー => 値 の形で書きます。配列を順に処理するには foreach を使います。WordPressのテンプレートでも最もよく見る構文です。

<?php
$prices = ["コーヒー" => 400, "紅茶" => 350];

foreach ($prices as $name => $price) {
    echo "{$name}:{$price}円\n";
}

「コーヒー:400円」「紅茶:350円」の2行が出力されます。as $キー => $値 と書くとキーと値を同時に受け取れます。値だけでよければ foreach ($prices as $price) と書きます。

練習問題5:for 文

繰り返しのたびに数字とカンマを出しています。出力はどうなるでしょう?

<?php
for ($i = 1; $i <= 3; $i++) {
    echo $i . ",";
}

答え:1,2,3,

$i <= 3 なので3も含みます。カンマは毎回付けているので、最後の3の後ろにも残ります。末尾のカンマを付けたくないときは、配列にまとめて implode(",", $配列) でつなぐのが定番です。

練習問題6:配列への追加と取り出し

末尾に要素を追加してから、要素数と2番目の要素を出しています。出力はどうなるでしょう?

<?php
$fruits = ["apple", "banana", "grape"];
$fruits[] = "melon";
echo count($fruits) . " " . $fruits[1];

答え:4 banana

$fruits[] = … は配列の末尾への追加です。要素数は count() で4になります。番号は0から数えるので、[1] は2番目のbananaです。


WordPressのテンプレートを読んでみる

ここまでの文法で、WordPressのテンプレートがかなり読めるようになっています。記事一覧を出す典型的なコードを見てみましょう。

<?php if ( have_posts() ) : ?>
  <ul>
  <?php while ( have_posts() ) : the_post(); ?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
  <?php endwhile; ?>
  </ul>
<?php endif; ?>

見慣れない点は2つです。1つは if (…):endif; のように、波かっこの代わりにコロンと end〜 を使う書き方です。HTMLの中にPHPを細かく埋め込むとき、どこでブロックが閉じるのかを読みやすくするための書き方で、意味は波かっこと同じです。

もう1つは、have_posts()the_title() のようなWordPressが用意した関数(テンプレートタグ)です。

関数役割
have_posts()表示する投稿が残っているかを true / false で返す
the_post()次の投稿を「いま扱う投稿」として準備する
the_permalink()いま扱っている投稿のURLを出力する
the_title()いま扱っている投稿のタイトルを出力する

つまりこのコードは、「投稿があれば ul を出し、投稿が残っている間は1件ずつリンクつきのタイトルを li で出す」と読めます。whileif という基本の構文の上に、WordPressの関数が乗っているだけです。


つまずきやすい3つのポイント

1. == と === の違い

== は型をそろえてから比べるため、文字列の "10" と数値の 10 が等しいと判定されます。=== は型まで一致しないと等しくなりません。フォームやURLから受け取る値はすべて文字列なので、比較には === を使うのが安全です。

<?php
var_dump("10" == 10);   // bool(true)
var_dump("10" === 10);  // bool(false)

2. 日本語の文字数

strlen() が返すのは文字数ではなくバイト数です。UTF-8の日本語は1文字が3バイトなので、「こんにちは」は15と数えられます。抜粋を何文字で切るといった処理では、文字数を返す mb_strlen()mb_substr() を使います。

<?php
$text = "こんにちは";
echo strlen($text);     // 15
echo "\n";
echo mb_strlen($text);  // 5

3. 出力するときのエスケープ

ユーザーが入力した文字をそのまま echo すると、<script> のようなタグまでHTMLとして動いてしまいます(XSS)。外から来た値を出力するときは、htmlspecialchars() で記号を文字参照に変えてから出します。WordPressでは同じ役割を esc_html() が担います。

<?php
$input = '<b>太字</b>';
echo htmlspecialchars($input);  // &lt;b&gt;太字&lt;/b&gt;

次に何を学ぶか

基礎文法の次は、実際のコードを読む量を増やすのがおすすめです。書く練習よりも先に読む力が付くと、WordPressのテーマやプラグインの説明に載っているコードが意味を持って見えるようになります。

実務でよく出てくる $_POST やデータベース接続まで含めた読み方は、実コードで学ぶPHPの読み方 で解説しています。サーバー側の技術の全体像をつかみたい場合は バックエンドとは?サーバー・DB・APIの全体像 が地図になります。

やりたいこと次に読む記事
テーマのテンプレートを直したいarchive.phpの使い方single.phpの使い方
フォームを作りたいPHPメールフォームの作り方
会員機能を作りたいPHPログイン機能の作り方
データベースを扱いたいPDOでCRUDを実装する方法

その前に、文法を目で覚えておくと先が楽になります。練習アプリには、この記事の6問に加えて、=====match 式、array_filter() のキーの扱い、参照渡し、テンプレートの読み解きまで含めた20問を用意しています。


よくある質問

Q. PHPとJavaScriptは、どちらを先に学ぶべきですか?

Web制作をしているなら、画面の動きに直結するJavaScriptを先に学ぶのが一般的です。ただしWordPressのテーマを扱う仕事が中心なら、PHPのテンプレートを読める力のほうが先に必要になる場面も多くあります。変数・条件分岐・繰り返しの考え方は共通なので、どちらから始めてももう一方の習得は早くなります。

Q. WordPressを使うだけでもPHPの知識は必要ですか?

管理画面で記事を書き、既存のテーマをそのまま使うだけなら必須ではありません。テンプレートの表示を変えたい、functions.php にコードを追加したいといった段階になると必要になります。この記事の範囲の文法を読めるだけでも、貼り付けるコードが何をしているかを判断できるようになります。

Q. PHPのバージョンはどれを使えばよいですか?

WordPressの公式要件では、PHP 8.3以上が推奨されています(2026年9月時点)。新しく環境を作るなら8系の最新に近いバージョンを選んでください。PHP 8で入った match 式などは古いバージョンでは動かないため、解説記事を読むときは対象のバージョンにも注意が必要です。

Q. インストールせずに練習することはできますか?

コードを読む練習であればできます。本記事の練習アプリは、PHPのコードを読んで出力を4択で当てる形式なので、ブラウザだけで進められます。実際に書いて動かす段階になったら、MAMPやXAMPPなどでローカル環境を用意してください。

Q. 基礎文法を覚えるのにどのくらいかかりますか?

JavaScriptを書いた経験がある人なら、この記事の範囲は数時間で一通り読めます。考え方を新しく学ぶのではなく、$. といった書き方を置き換える作業が中心だからです。読んだあとに練習問題で出力を予想し、答え合わせまでしておくと定着が早くなります。

Q. PHPの仕事は今もありますか?

あります。W3Techsの調査ではサーバー側の言語が判明しているWebサイトの約7割がPHPを使っており、WordPressの制作・保守を中心に需要が続いています。PHP自体も8系で型の扱いや構文の改良が続いており、公式に保守されているバージョンが複数あります。

ここまでの内容を確かめられるよう、記事の6問を含む20問をブラウザで解ける練習アプリを用意しました。答えを選ぶと、その場で正誤と解説が表示されます。