PHPプログラミングを学び始めると、避けては通れないのがエラーメッセージとの遭遇です。画面に表示される赤い文字に、戸惑ったり、やる気をなくしてしまったりするかもしれません。
しかし、エラーメッセージは決してあなたの敵ではありません。むしろ、「コードのこの部分が、文法的に間違っていますよ」と教えてくれる、PHPからの親切なヒントなのです。
この記事では、初心者が最も遭遇しやすい「Parse error (文法エラー)」に焦点を当て、具体的なエラー例を3つのケーススタディを通して、その読み解き方と修正方法を解説します。エラーを恐れず、デバッグ力を身につける第一歩を踏み出しましょう。
PHPエラーの主な種類
PHPのエラーにはいくつか種類がありますが、まずは以下の4つを頭の片隅に入れておくと良いでしょう。
- Parse error (Syntax error): 文法エラー。PHPの文法ルールに反しているため、プログラムを実行すらできない状態。今回のメイントピックです。
- Notice: 軽微なエラー。「未定義の変数を使っていますよ」など、実行は継続されるが、潜在的なバグの可能性があるという通知。
- Warning: Noticeより重要度が高いエラー。「存在しないファイルを読み込もうとしました」など、実行は継続されるが、意図しない結果になる可能性が高い警告。
- Fatal error: 致命的なエラー。「定義されていない関数を呼び出しました」など、プログラムの実行が完全に停止してしまうエラー。
ケーススタディで学ぶエラー修正
ケース1: セミコロンのつけ忘れ
一文の終わりを示すセミコロン;
は、PHPにおいて非常に忘れやすい要素の一つです。
【エラーが発生するコード】
<?php
$word1 = "こんにちは" // ← ここにセミコロンがない!
$word2 = "世界";
echo $word1 . $word2;
【表示されるエラーメッセージ】 Parse error: syntax error, unexpected '$word2' (T_VARIABLE) in /path/to/your/file.php on line 3
【エラーの読み解き方】
on line 3
: 「3行目がおかしい」とPHPは教えてくれています。unexpected '$word2'
: 「予期しない$word2
が出てきました」と言っています。PHPは$word1
の行が終わるはずの場所に$word2
が出てきたため、混乱しています。- 思考プロセス: 「3行目がおかしいと言っているが、3行目自体は
$word2 = "世界";
で正しそうだ。Parse errorの場合、問題は指摘された行の直前にあることが多い。そうだ、2行目の末尾にセミコロン;
が抜けている!」
【修正後のコード】
<?php
$word1 = "こんにちは"; // ← セミコロンを追加
$word2 = "世界";
echo $word1 . $word2;
ケース2: PHPとHTMLの不正な混在
PHPのコードブロック<?php ... ?>
の中に、直接HTMLタグを記述することはできません。
【エラーが発生するコード】
<?php
$array = ["犬", "猫", "鳥"];
foreach ($array as $var) {
echo $var . "<br>";
}
<h1>動物リスト</h1> // ← PHPコードブロックの中にHTMLが!
?>
【表示されるエラーメッセージ】 Parse error: syntax error, unexpected '<' in /path/to/your/file.php on line 6
【エラーの読み解き方】
on line 6
: 「6行目がおかしい」と指摘されています。unexpected '<'
: 「予期しない<
が出てきました」と言っています。PHPは}
の後もPHPコードが続くと考えていたのに、突然HTMLの開始タグ<
が現れたため、文法違反だと判断しました。- 思考プロセス: 「PHPはHTMLを直接解釈できない。HTMLを出力したいなら、一度PHPモードを閉じるか、
echo
で文字列として出力する必要がある。」
【修正後のコード】
<?php
$array = ["犬", "猫", "鳥"];
foreach ($array as $var) {
echo $var . "<br>";
}
?> // ← いったんPHPを閉じる
<h1>動物リスト</h1>
ケース3: 括弧の閉じ忘れ・位置間違い
関数の引数などを囲む括弧()
の対応が取れていない、または位置が間違っているケースも頻発します。
【エラーが発生するコード】
<?php
$array = ["犬", "猫", "鳥"];
foreach ($array as $var) {
// mb_strpos()の括弧を閉じる位置が間違っている
if (mb_strpos($var, "鳥" !== false)) {
echo $var . "は鳥類です。";
}
}
【表示されるエラーメッセージ】 Parse error: syntax error, unexpected token ")" in /path/to/your/file.php on line 4
(エラーメッセージは環境によって多少変わることがあります)
【エラーの読み解き方】
unexpected token ")"
: 「予期しない)
が出てきました」という指摘。- 思考プロセス: エラーが出た行の括弧の対応を注意深く見直します。「
mb_strpos
関数は、($var, "鳥")
で引数が終わるはず。その結果とfalse
を比較したいのだから、括弧はmb_strpos($var, "鳥")
の直後で閉じるべきだ。」
【修正後のコード】
<?php
$array = ["犬", "猫", "鳥"];
foreach ($array as $var) {
// mb_strpos()の後に !== false を評価するように修正
if (mb_strpos($var, "鳥") !== false) {
echo $var . "は鳥類です。";
}
}
エラーを防ぐためのヒント
- 高機能なエディタを使う: VSCodeなどのエディタは、文法ミスがあるとリアルタイムで色を変えて教えてくれます(シンタックスハイライト)。括弧の対応なども視覚的に分かりやすく、多くのエラーを未然に防げます。
- こまめに実行する: 一度にたくさんのコードを書かず、少し書いたら保存してブラウザで確認、というサイクルを繰り返すことで、エラーの原因箇所を特定しやすくなります。
まとめ
エラーメッセージは、プログラミング学習における最高の教師の一人です。
【エラー対処の心構え】
- 慌てない: エラーは出て当たり前。
- メッセージを読む: 「何が」「何行目で」問題なのかを読み取る。
- 原因を推測する: 指摘された行とその直前の行を重点的に見直す。
このプロセスを繰り返すうちに、エラーメッセージを見ただけで、すぐさま原因が推測できるようになります。デバッグ作業を楽しみながら、着実にスキルアップしていきましょう。