0/10章
所要2時間・予備知識ゼロでOK

見て、予想して、
答え合わせ。
PHPは読める。

PHP(ピー・エイチ・ピー)は、WordPressやネットショップ、社内システムの裏側で動いているプログラミング言語です。この教材では、コードを書けるようになるのではなく、エンジニアやAIが書いたPHPを読んで「何をしているか」が分かるところを目指します。各章にある「このコードは何を表示する?」という問題に、予想してから答え合わせをしていきます。

コード

$name = "山田";
echo "こんにちは、" . $name . "さん";

表示される結果

こんにちは、山田さん
  • 10章(1章10〜15分)
  • 120分で全体を一周
  • 20問の確認問題
  • 18語の用語集つき
どこから読む?

あなたは、
どれに近いですか?

はじめて学ぶ人

基礎から順番に、全部読む

  • PHPがどこで動いているか
  • 変数・条件分岐・ループの読み方
  • フォームと安全対策の考え方
目安:120分(第1〜10章)
第1章から読む
時間がない人

要点の6章だけ読む

  • 仕組み(第1・2章)
  • 変数と条件分岐(第3・5章)
  • フォームと安全対策(第8・9章)
目安:75分(第1・2・3・5・8・9章)
要点コースを始める
AIが書いたコードを確かめたい人

安全対策と総まとめを先に

  • 危ないコードの見分け方
  • 実際のコードを1行ずつ読む
  • AIへの質問のしかた
目安:20分(第9・10章)→ 分からない所だけ戻る
第9章から読む
この教材で解決できること

こんな悩みは
ありませんか?

エンジニアの「PHPのここを直します」という説明が分からない
コードの基本の形が分かり、何を直すのか想像できる
AIにPHPを書いてもらったが、正しいのか判断できない
最低限確認すべき3つの点(第9・10章)が分かる
WordPressのテーマを触るとき、PHPファイルが怖い
「<?php」から始まる部分の意味が読めるようになる
学習の流れ・目次

4つのステップで、
2時間。

STEP 120分

PHPがどこで、どう動くかを知る

    STEP 240分

    変数・計算・条件分岐を読む

      STEP 325分

      配列・ループ・関数を読む

        STEP 435分

        フォームと安全対策、総まとめ

          各章の最後にある「この章を読み終えた」を押すと、目次に印が付きます。記録はお使いのブラウザの中だけに保存されます。

          CHAPTER 01約10分

          PHPとは何か

          この章のゴール:PHPが「どこで」「何のために」使われているかを、自分の言葉で説明できる。

          PHPは、Webサイトを動かすためのプログラミング言語です。1995年に生まれ、今もサーバー側(後述)の言語が分かっているWebサイトのうち、約7割で使われているとされます。世界のWebサイトの4割以上を占めるWordPressも、PHPで作られています。

          身近なところで動いているPHP

          • ネットショップの「カートに入れる」「注文を確定する」
          • 会社サイトの「お問い合わせフォーム」
          • 会員サイトの「ログイン」
          • WordPressで作られたブログやお知らせページ

          レストランにたとえると

          Webページを見る流れは、レストランでの注文によく似ています。

          レストランWebの世界説明
          お客さんブラウザChromeやSafariなど。ページを「注文」する側
          厨房サーバーインターネットの向こうにある、ページを作って返すコンピューター
          料理人とレシピPHP注文に応じて、その場でページを組み立てる
          出来上がった料理HTMLブラウザに届く完成品のページ

          ポイントは、PHPは厨房(サーバー)で動き、お客さん(ブラウザ)には完成品だけが届くということです。同じページでも、ログインした人の名前や今日の日付などを、PHPがその都度組み立てています。

          補足ブラウザの中で動く言語にはJavaScript(ジャバスクリプト)があります。「PHPは厨房、JavaScriptは客席で動く」と覚えておくと、エンジニアの会話が分かりやすくなります。
          まとめ
          • PHPはサーバーで動き、Webページをその場で組み立てる言語
          • ブラウザに届くのは、組み立て後のHTMLだけ
          • WordPressやお問い合わせフォームなど、身近なところで使われている
          CHAPTER 02約10分

          PHPが画面を作る仕組み

          この章のゴール:PHPファイルの「どこからどこまでがPHPか」を見分けられる。

          PHPのファイルは、名前の最後が .php になっています(例:contact.php)。中身は、普通のHTML(ページの見た目を書く言語)の中に、PHPの命令を埋め込んだ形をしています。

          news.php<h1>本日のお知らせ</h1>
          <p>今日は <?php echo date("Y年n月j日"); ?> です。</p>
          ブラウザに表示される結果(例)本日のお知らせ
          今日は 2026年10月22日 です。

          読み方の3つのルール

          書き方意味
          <?php 〜 ?>この間がPHP。外側は普通のHTML。ファイル全体がPHPのときは、最後の ?> を省略することが多い
          echo「画面に表示する」という命令。PHPで最もよく見る言葉
          ;(セミコロン)命令の終わり。日本語の「。」に当たる。付け忘れるとエラーになる

          サーバーはこのファイルを上から順に読み、<?php の部分だけを実行して、結果の文字に置き換えます。そのためブラウザに届くのは「今日は 2026年10月22日 です。」というHTMLだけで、PHPのコードそのものは届きません。

          メモ書き(コメント)

          コードの中には、人間向けのメモが書かれていることがあります。これをコメントと呼び、実行されません。読むときの大きな手がかりになります。

          // 1行のメモはスラッシュ2本から
          /* 複数行のメモは
             この記号で囲む */
          echo "こんにちは"; // 行の途中から書くこともできる
          まとめ
          • <?php から先がPHP。echo は「表示する」
          • 命令の終わりには ; を付ける
          • // や /* */ はメモ(コメント)で、実行されない
          CHAPTER 03約15分

          変数とデータの種類

          この章のゴール:$ の付いた言葉が「値を入れた箱」だと分かり、中身の種類を見分けられる。

          PHPでは、$(ドル記号)で始まる言葉を変数と呼びます。変数は、名前の付いた箱のようなものです。= は「等しい」ではなく、右の値を左の箱に入れるという意味です。

          // 請求書1枚分の情報を、箱に入れておく
          $customer = "株式会社サガ商事";  // 取引先名
          $amount   = 50000;             // 請求金額
          $taxRate  = 0.1;               // 消費税率
          $isPaid   = false;             // 入金済みか
          
          echo $customer;
          表示される結果株式会社サガ商事

          Excelにたとえると、変数は「名前を付けたセル」です。セルに名前を付けておけば、あとから =請求金額*消費税率 のように使えるのと同じです。

          中身の種類(データ型)

          種類例見分け方
          文字列"株式会社サガ商事"" " か ' ' で囲まれている
          整数50000囲まれていない、小数点のない数
          小数0.1小数点のある数
          真偽値true / false「はい/いいえ」の2択
          nullnull「何も入っていない」ことを表す
          つまずきやすい点"100" と 100 は別物です。引用符で囲むと「文字としての100」になります。CSVから読み込んだ金額が文字列のままになっていて、並べ替えがおかしくなる、という不具合はよくあります。

          箱の中身は入れ替えられる

          同じ変数に新しい値を入れると、前の値は消えて上書きされます。

          $status = "未入金";
          $status = "入金済み";
          echo $status;  // → 入金済み
          まとめ
          • $ で始まるのが変数(値を入れる箱)
          • = は「右の値を左に入れる」
          • 引用符で囲まれていれば文字列。"100" と 100 は別物
          CHAPTER 04約10分

          計算と文字のつなぎ方

          この章のゴール:金額計算のコードを読み、表示される結果を予想できる。

          計算の記号

          記号意味例結果
          +足し算100 + 20120
          -引き算100 - 2080
          *掛け算100 * 3300
          /割り算100 / 425
          %割った余り10 % 31

          文字をつなぐのは「.」

          PHPでは、文字と文字をつなぐときに .(ドット)を使います。Excelの & と同じ役割です。+ ではない点に注意してください。

          $price    = 12000;            // 単価
          $qty      = 3;                // 数量
          $subtotal = $price * $qty;    // 小計 36000
          $tax      = $subtotal * 0.1;  // 消費税 3600
          
          echo "合計:" . number_format($subtotal + $tax) . "円";
          表示される結果合計:39,600円

          number_format は、数字に3桁ごとのカンマを付ける命令です。このように、PHPにはよく使う処理があらかじめ用意されています(第7章で詳しく扱います)。

          引用符の中に変数を書く方法

          ダブルクォート " " の中に変数を書くと、中身に置き換えてくれます。シングルクォート ' ' では置き換わりません。

          $name = "山田";
          echo "担当:{$name}";  // → 担当:山田
          echo '担当:{$name}';  // → 担当:{$name}(そのまま表示)
          経理の方へ:小数の計算には誤差が出るコンピューターは小数を正確に扱えないことがあり、0.1 + 0.2 がわずかに 0.3 からずれます。そのため金額は「円単位の整数」で計算し、端数処理を明示するのが基本です。floor(切り捨て)、round(四捨五入)、ceil(切り上げ)という命令がよく使われます。
          まとめ
          • 計算は + - * / %。文字をつなぐのは .
          • " " の中の変数は中身に置き換わる
          • 金額は整数で扱い、端数処理を明示する
          CHAPTER 05約15分

          条件分岐で処理を分ける

          この章のゴール:if の文を「もし〜なら、〜する」と日本語に置き換えて読める。

          プログラムの多くは「条件によって処理を変える」ことでできています。そのための書き方が if(もし)です。Excelの IF関数 と考え方は同じです。

          // 購入金額によって送料を決める
          if ($total >= 10000) {
              $shipping = 0;      // 1万円以上なら送料無料
          } elseif ($total >= 5000) {
              $shipping = 300;    // 5千円以上なら300円
          } else {
              $shipping = 500;    // それ以外は500円
          }

          日本語に置き換えると、こうなります。

          • if (条件) { … }:もし条件に当てはまるなら、{ } の中を実行する
          • elseif (条件) { … }:そうでなくて、この条件に当てはまるなら
          • else { … }:どれにも当てはまらないなら

          上から順に調べ、最初に当てはまったところだけを実行します。{ }(波かっこ)は「ここからここまでが1つのまとまり」という印です。

          比べるための記号

          記号意味
          ==等しい(種類の違いは大目に見る)
          ===種類まで含めて完全に等しい(こちらが安全)
          !=、!==等しくない
          >、>=より大きい、以上
          <、<=より小さい、以下
          &&かつ(両方当てはまる)
          ||または(どちらかが当てはまる)
          !〜ではない(反対にする)
          つまずきやすい点= は「入れる」、== と === は「比べる」です。if ($a = 5) と書くと比べずに5を入れてしまい、いつも条件に当てはまる不具合になります。
          // 「かつ」を使った例:未入金で、期限を過ぎていたら督促
          if ($isPaid === false && $today > $dueDate) {
              echo "督促メールを送る対象です";
          }
          まとめ
          • if / elseif / else は「もし/そうでなくもし/それ以外」
          • 上から調べ、最初に当てはまった所だけ実行
          • = は入れる、=== は比べる
          CHAPTER 06約15分

          配列とループで、
          まとめて処理する

          この章のゴール:一覧データ(配列)と、それを1件ずつ処理する foreach を読める。

          配列:複数の値をまとめた箱

          変数には1つの値しか入りませんが、配列には複数の値を順番に並べて入れられます。[ ](角かっこ)で囲み、カンマで区切ります。

          $items = ["コピー用紙", "ボールペン", "クリアファイル"];
          
          echo $items[0];  // → コピー用紙
          echo $items[2];  // → クリアファイル
          echo count($items);  // → 3(件数を数える)
          つまずきやすい点配列の番号は0から数えます。1件目が [0]、2件目が [1] です。

          連想配列:名前で取り出せる配列

          番号の代わりに名前(キー)を付けて値を入れることもできます。これを連想配列と呼びます。Excelの1行に、列見出しが付いているイメージです。

          $invoice = [
              "no"       => "INV-0012",
              "customer" => "株式会社サガ商事",
              "amount"   => 50000,
          ];
          
          echo $invoice["customer"];  // → 株式会社サガ商事

          => は「この名前に、この値」という対応を表します。

          foreach:1件ずつ順番に処理する

          配列の中身を1件ずつ取り出して、同じ処理を繰り返すのが foreach(それぞれについて)です。このような繰り返しをループと呼びます。

          $sales = [120000, 98000, 143000];  // 3か月分の売上
          $sum = 0;
          
          foreach ($sales as $s) {
              $sum = $sum + $s;  // 1件ずつ足していく
          }
          
          echo number_format($sum) . "円";
          表示される結果361,000円

          foreach ($sales as $s) は「$sales の中身を1件ずつ $s という箱に入れて、{ } の中を繰り返す」と読みます。3件あれば3回繰り返します。Excelで列の合計を出すSUM関数を、手順として書いたものと考えると分かりやすいでしょう。

          補足ほかに for や while という繰り返しの書き方もあります。どれも「{ } の中を何度も実行する」点は同じです。
          まとめ
          • 配列は [ ] で複数の値をまとめたもの。番号は0から
          • 連想配列は "名前" => 値 で、名前で取り出せる
          • foreach は1件ずつ取り出して繰り返す
          CHAPTER 07約10分

          関数:処理に名前を付けて
          使い回す

          この章のゴール:function で作られた処理の「入力」と「出力」を読み取れる。

          関数とは、決まった処理に名前を付けたものです。材料を渡すと、加工した結果を返してくれる「小さな機械」と考えてください。Excelの SUM や ROUND も関数です。

          最初から用意されている関数

          関数働き例 → 結果
          number_format3桁ごとにカンマnumber_format(1234567) → 1,234,567
          count配列の件数count([5, 8, 2]) → 3
          round四捨五入round(2.5) → 3
          floor切り捨てfloor(2.9) → 2
          date日付や時刻date("Y-m-d") → 2026-10-22
          mb_strlen日本語の文字数mb_strlen("経理部") → 3

          自分で関数を作る

          // 税込金額を求める関数(1円未満は切り捨て)
          function withTax($price) {
              return floor($price * 110 / 100);
          }
          
          echo withTax(1980);  // → 2178
          echo withTax(500);   // → 550
          部分意味
          function withTax「withTax」という名前の関数を作る
          ($price)受け取る材料。引数(ひきすう)と呼ぶ
          return …結果を返す。返された値を戻り値と呼ぶ
          withTax(1980)作った関数に1980を渡して使う

          $price * 1.1 ではなく $price * 110 / 100 と書いているのは、第4章で触れた小数の誤差を避けるためです。こうした工夫がコメントに書かれていることも多いので、注目してみてください。

          補足:フレームワーク実際の開発では、Laravel(ララベル)などのフレームワーク(よく使う関数や仕組みをまとめた土台)を使うことがほとんどです。見慣れない関数があっても、「何かを受け取って、何かを返す機械」と考えれば読み進められます。
          まとめ
          • 関数は「材料(引数)を受け取り、結果(戻り値)を返す」機械
          • return が結果を返す場所
          • 知らない関数は、名前と使われ方から働きを推測する
          CHAPTER 08約15分

          フォームの受け取り:
          お問い合わせ画面の裏側

          この章のゴール:入力された値がPHPにどう届くかを説明できる。

          PHPがもっとも活躍するのは、利用者が入力した内容を受け取って処理する場面です。お問い合わせフォームを例に見てみましょう。

          1. 入力画面(HTML)

          form.html<form method="post" action="contact.php">
            会社名:<input name="company">
            メール:<input name="email">
            <button>送信する</button>
          </form>
          • action="contact.php":送信したら contact.php に届ける
          • method="post":送り方(後述)
          • name="company":この入力欄に付けた名前。PHP側はこの名前で受け取る

          2. 受け取る側(PHP)

          contact.php<?php
          $company = $_POST["company"] ?? "";
          
          if ($company === "") {
              echo "会社名を入力してください";
          } else {
              echo $company . " 様、送信ありがとうございました";
          }
          部分意味
          $_POST["company"]フォームの「company」欄に入力された値。$_POST はPHPが自動で用意する連想配列
          ?? ""値が送られてこなかったときは、空の文字 "" を使う
          if ($company === "")空なら注意を表示する(入力チェック)

          POSTとGET:2つの送り方

          POST($_POST)GET($_GET)
          送り方見えない形で送るURLの後ろに付けて送る
          例:list.php?page=2
          使う場面問い合わせ、ログイン、注文など検索、ページ送り、絞り込みなど
          注意パスワードや個人情報はこちらURLが履歴に残るので秘密の情報は送らない
          実はこのコードには問題があります上の contact.php は、入力された会社名をそのまま画面に表示しています。悪意のある人が会社名の欄にプログラムを書き込むと、それが画面上で動いてしまいます。どう直すかは、次の第9章で説明します。
          まとめ
          • 入力欄の name の名前で、PHP側が値を受け取る
          • POSTは見えない送り方、GETはURLに付ける送り方
          • 入力された値は、そのまま信用して使ってはいけない
          CHAPTER 09約10分

          安全対策の基本:
          入力は信用しない

          この章のゴール:PHPのコードで「危ない書き方」を3つ見分けられる。

          Webサイトは世界中の誰でも使えます。そのため、入力欄には悪意のある文字が入ってくる前提で作る必要があります。PHPでよく問題になるのは、次の3つです。

          1. 入力をそのまま表示する(XSS)

          入力された値をそのまま echo すると、そこにプログラムが仕込まれていた場合、ほかの利用者の画面で動いてしまいます。これをXSS(クロスサイト・スクリプティング)と呼びます。

          // 危ない:入力をそのまま表示
          echo $_POST["company"];
          
          // 安全:htmlspecialchars で無害な文字に変えてから表示
          echo htmlspecialchars($_POST["company"], ENT_QUOTES, "UTF-8");

          htmlspecialchars は、< などプログラムとして働く記号を、ただの文字として表示されるように変換する関数です。利用者が入力したものを表示するときは必ず通す、と覚えてください。

          2. データベースへの命令を文字のつなぎ合わせで作る(SQLインジェクション)

          会員情報や請求データはデータベース(大量のデータを保存・検索する仕組み)に保存され、SQL(エスキューエル)という命令文で出し入れします。このSQLを入力値とつなぎ合わせて作ると、命令文そのものを書き換えられ、データを盗まれたり消されたりします。

          // 危ない:入力値をSQLに直接つなげている
          $sql = "SELECT * FROM customers WHERE name = '" . $_POST["name"] . "'";
          
          // 安全:? の場所に、あとから値を当てはめる(プリペアドステートメント)
          $stmt = $pdo->prepare("SELECT * FROM customers WHERE name = ?");
          $stmt->execute([$_POST["name"]]);

          見分け方は簡単です。SQLの文の中に . で $_POST や $_GET がつながれていたら危険、prepare と ? を使っていれば安全な書き方です。

          3. パスワードをそのまま保存する

          // 危ない:入力されたパスワードをそのまま保存
          $saved = $_POST["password"];
          
          // 安全:元に戻せない形に変換して保存
          $saved = password_hash($_POST["password"], PASSWORD_DEFAULT);

          万一データが漏れても元のパスワードが分からないよう、password_hash で変換して保存します。

          危ない書き方安全な書き方
          入力値をそのまま echohtmlspecialchars を通して表示
          SQLに入力値を . でつなぐprepare と ? を使う
          パスワードをそのまま保存password_hash で変換して保存
          補足このほか、エラーの詳しい内容を利用者の画面に出さない、PHP本体を古いまま使わない(サポートが切れた版は修正が届かない)、といった点も大切です。
          まとめ
          • 入力を表示するときは htmlspecialchars
          • SQLは prepare と ? で組み立てる
          • パスワードは password_hash で変換して保存
          CHAPTER 10約10分

          総まとめ:
          実際のコードを読んでみる

          この章のゴール:これまでの知識を組み合わせて、20行ほどのコードの動きを説明できる。

          未入金の請求だけを一覧にして、合計を表示するプログラムです。まず自分で読んでみて、何が表示されるか予想してください。

          unpaid.php<?php
          // 請求データ(本来はデータベースから取り出す)
          $invoices = [
              ["customer" => "サガ商事",   "amount" => 50000, "paid" => true],
              ["customer" => "有明フーズ", "amount" => 32000, "paid" => false],
              ["customer" => "唐津工業",   "amount" => 78000, "paid" => false],
          ];
          
          // 金額を「50,000円」の形にする関数
          function yen($n) {
              return number_format($n) . "円";
          }
          
          $unpaid = 0;
          foreach ($invoices as $inv) {
              if ($inv["paid"] === false) {
                  $unpaid = $unpaid + $inv["amount"];
                  echo htmlspecialchars($inv["customer"]) . ":" . yen($inv["amount"]) . "<br>";
              }
          }
          echo "未入金の合計:" . yen($unpaid);
          1行ずつの解説を開く
          部分読み方章
          $invoices = [ … ]請求3件を、連想配列の配列として入れる。表の3行分にあたる3・6
          function yen($n)数字を受け取り、カンマと「円」を付けて返す関数を作る4・7
          $unpaid = 0;未入金の合計を入れる箱を0で用意する3
          foreach ($invoices as $inv)請求を1件ずつ $inv に入れて繰り返す(3回)6
          if ($inv["paid"] === false)入金済みでない請求だけ、中の処理をする5
          $unpaid = $unpaid + …その請求の金額を合計に足す4
          echo htmlspecialchars(…)取引先名を安全な形にして、金額と一緒に表示する9
          最後の echo繰り返しが終わった後に、合計を1回だけ表示する2

          AIと一緒にPHPを読むときのコツ

          知らない書き方に出会ったら、AIに説明してもらうのが近道です。そのときは、コードを貼り付けて次のように頼むと、分かりやすい答えが返ってきます。

          次のPHPのコードを、プログラミング未経験の経理担当者にも分かるように、1行ずつ日本語で説明してください。

          このPHPのコードに、XSS・SQLインジェクション・パスワードの扱いなど、安全面の問題がないか確認してください。問題があれば、直したコードも見せてください。

          このコードで金額を計算している部分について、小数の誤差や端数処理(切り捨て・四捨五入)に問題がないか確認してください。

          AIが書いたコードで、最低限確かめる3点 ① 入力された値を表示する所に htmlspecialchars があるか ② SQLに入力値を . でつないでいないか ③ 金額の計算で端数処理がはっきりしているか。
          分からないときは「読めないので確認してほしい」とエンジニアに相談することも、立派な判断です。
          まとめ
          • 変数・配列・条件分岐・ループ・関数の組み合わせで、プログラムはできている
          • 読むときは「データ → 繰り返し → 条件 → 表示」の順に追う
          • AIには「1行ずつ説明して」「安全面を確認して」と頼む
          用語集

          よく出てくる言葉

          サーバー
          インターネットの向こうで、ページを作って返すコンピューター。PHPはここで動く
          ブラウザ
          ChromeやSafariなど、Webページを見るためのソフト
          HTML
          ページの文章や見出しなど、見た目の骨組みを書く言語
          echo
          画面に文字を表示する命令
          変数
          $ で始まる、値を入れておく名前付きの箱
          文字列
          引用符で囲まれた文字のデータ
          真偽値
          true(はい)か false(いいえ)の2択のデータ
          配列
          複数の値を順番に並べてまとめたもの。番号は0から
          連想配列
          名前(キー)で値を取り出せる配列
          条件分岐
          if を使い、条件によって処理を変えること
          ループ
          同じ処理を繰り返すこと。foreach など
          関数
          処理に名前を付けたもの。引数を受け取り、戻り値を返す
          引数・戻り値
          関数に渡す材料と、関数が返す結果
          POST・GET
          フォームの値を送る2つの方法。GETはURLに値が付く
          データベース
          大量のデータを保存・検索する仕組み。SQLで操作する
          XSS
          入力に仕込まれたプログラムが画面上で動いてしまう攻撃
          SQLインジェクション
          入力によってデータベースへの命令文を書き換える攻撃
          フレームワーク
          よく使う仕組みをまとめた開発の土台。PHPではLaravelなど
          おつかれさまでした

          次は、身近なPHPを
          のぞいてみましょう。

          WordPressのテーマファイルや、社内システムのコードを開いて、$・if・foreach・echo を探してみてください。全部は分からなくても「ここで条件を分けている」「ここで一覧を繰り返している」と分かれば、この教材の目標は達成です。