ワイヤード・パンチ

元・大阪人が、岡山の山奥でも生きていけることを証明するためのブログ。

PHPの「Parse error: syntax error, unexpected ‘=’, expecting ‘]’ in …」エラーの対処法。

PHPのコードを実行してみると、上の写真のようなエラーメッセージが出てきてしまいました。

予期せぬ記号がどこかに含まれているということなのですが、それがどこなのか…。

広告

問題のコード。

Parse error: syntax error, unexpected ‘=’, expecting ‘]’ in /var/www/html/wordpress/wp-content/themes/xxxxxxxxxx/functions.php on line 1888

上記が今回表示されたエラーメッセージとなります。

「]」の前、つまり該当の行に予期せぬ「=」が入っているということらしいのですが…。

function comment_list_message($key) {
	switch(filter_input(INPUT_POST, "action")) {
		case "send":
			$output = [
				"open" = true, // ここでエラーが発生。
				"title" => "承認完了",
				"message" => "選択したコメントを承認しました。",
			];
		break;
		case "delete":
			$output = [
				"open" => true,
				"title" => "削除完了",
				"message" => "選択したコメントを削除しました。",
			];
		break;
		default:
			$output = [
				"open" => false,
			];
		break;
	}
	return $output[$key];
}

こちらが問題のコード。

与えられた引数に応じて、配列変数の値の一部を返すというものになっています。

コメントを入れている箇所がエラーの該当行です。

そこはイコールを入れないといけないところなので、予期せぬイコールというわけではなさそうですが…。

見落としやすい代入記号。

先程のコード、配列の要素に値を代入する方法が間違っています。

ただの変数に値を代入するならイコールだけでいいのですが、配列の要素の場合はイコールと右向き不等号、つまり「=>」という矢印のような形でなければいけません。

パッと見ただのイコールなのか、不等号つきのイコールなのかわかりづらいので、つい見落としてしまいました。

というわけで今回の件は、不等号をつけるだけで解決します

わかりさえすれば簡単な問題なのですが、カンマの付け忘れとかカッコが閉じられてないとか、そういうところばかり注目してしまい、解決まで余計に時間を費やしてしまいました。

余談。

このような見落としが発生してしまうあたり、PHPって不完全な言語じゃないのかと思えてきました。

ただのイコールも不等号つきイコールも、値を代入するという役割には変わりないのに、代入先が変数なのか配列の要素なのかで、なぜか使い分ける必要があったり。

それに、カッコで囲ったり改行前にカンマで区切ったりしないといけないせいで、ちゃんとついてるか見落としのチェックをしないといけなかったり。

正直言ってPHPも、CSSに対するSASS、Javascriptに対するCoffeeScriptみたいに、余計な記号を付けなくていい、もっとコードがすっきりした言語になってくれないかなぁって…。

でも、今やってる仕事もこのサイトも、完全にWordpressに依存しているので、PHPからはまだまだ離れられそうにありません。