Code Fix

初級

波括弧 } の閉じ忘れによる Parse error: Unclosed '{'

関数やif文の波括弧を閉じ忘れると、PHPはファイルの終わりに達してから、どの行の { が対応を失っているかを教えてくれます。

エラーメッセージの読み方

Parse error: Unclosed '{' on line 2 in main.php on line 5
main.php
ファイル名
5
行番号 — PHPが構文解析を諦めた位置
Parse error
エラー種別 — 実行前の構文チェックで検出されました
Unclosed '{' on line 2
内容 — 期待していたもの、または受け付けられなかったもの

このエラーが出る典型パターン

パターン1

 1  <?php
 2  function total($a, $b) {
 3    return $a + $b;
 4   
    ^
 5  echo total(1, 2);
Parse error: Unclosed '{' on line 2 in main.php on line 5

total関数を閉じる波括弧がありません。PHPはファイルの終わりに達してから、2行目の { が対応を失っていることを教えてくれます。

直し方: (空) を } にします。

この問題を解いてみる →

広告
広告スロット(未設定)

パターン2

 1  <?php
 2  if (true) {
 3    echo "yes";
 4   
    ^
 5  echo "done";
Parse error: Unclosed '{' on line 2 in main.php on line 5

if文の波括弧も同様です。閉じ忘れると、以降のコードがすべてif文の中に取り込まれたままファイル末尾に達してしまいます。

直し方: (空) を } にします。

この問題を解いてみる →

パターン3

 1  <?php
 2  function greet($name) {
 3    echo "Hi " . $name;
 4   
    ^
 5  greet("Al");
Parse error: Unclosed '{' on line 2 in main.php on line 5

greet関数の閉じ波括弧が必要です。「Unclosed '{' on line 2」の2行目こそが本当の原因の行です。

直し方: (空) を } にします。

この問題を解いてみる →

パターン4

 1  <?php
 2  function multiply($a, $b) {
 3    return $a * $b;
 4   
    ^
 5  echo multiply(2, 3);
Parse error: Unclosed '{' on line 2 in main.php on line 5

multiply関数を閉じる波括弧がありません。ファイル末尾に達してから2行目の{が対応を失っていることが分かります。

直し方: (空) を } にします。

この問題を解いてみる →

パターン5

 1  <?php
 2  while (false) {
 3    echo "never";
 4   
    ^
 5  echo "after";
Parse error: Unclosed '{' on line 2 in main.php on line 5

while文の波括弧も同様です。閉じ忘れると以降のコードが全てその中に取り込まれたままになります。

直し方: (空) を } にします。

この問題を解いてみる →

よくある誤解

エラーメッセージには2つの行番号が出ます。「on line 6」はPHPが諦めた場所、「Unclosed '{' on line 2」が本当の原因の行です。後者を直す必要があります。

実務での勘所

波括弧の対応崩れそのものを避ける手段として、PHPはif (...): ... endif;やforeach (...): ... endforeach;のような、コロンと対応する終了キーワードを使う別の構文を用意しています。この書き方はHTMLとPHPが混在するテンプレートファイルで特によく使われ、閉じ波括弧の代わりに名前の付いた終了キーワード(endif、endforeachなど)を探せばよいため、深くネストしたテンプレートでも対応関係を見失いにくくなります。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)