生活の跡

個人的な備忘録

FuelPHP で ParseError: syntax error に悩んだ結果、原因は全角スペースだった

概要

表題でオチまで述べていますが、エラー内容から原因を特定するまでに時間がかかったので一応メモしておきます。

環境

FuelPHP 1.8.2

エラー内容

キャプチャ

f:id:ishii-akihiro:20191205153818p:plain

テキスト

ErrorException [ Fatal Error ]:
Method Fuel\Core\View::__toString() must not throw an exception, caught ParseError: syntax error, unexpected 'echo' (T_ECHO)

原因が特定しにくかった理由

まず、エラーメッセージのMethod Fuel\Core\View::__toString() must not throw an exceptionに気を取られました。toString()に例外を投げてはならぬ、と言われても意図的に例外を投げる処理は書いていないし。。なので、とりあえず無視。
さらに、エラーになった箇所の特定がわかりにくかったです。0行目がおかしいと言われても。いろいろ試した結果、template.php の$content部分に指定しているビューファイルで引っかかっていることがわかりました。具体的には、コントローラで$this->template->content = View::forge('(※)', $data);としていた箇所の(※)に該当するビューファイルです。
原因のビューファイルの内容を一部消しながらエラーになる箇所を探したところ、エラーの原因になっている行まで特定できました。文末に全角スペースが入っていました

おわりに

syntax error でも、ParseError: syntax error, unexpected ':', expecting end of fileのような場合はバグを見つけやすいです。予期せぬコロンがありますよ、って言っているので。ただ全角スペースが入ってしまうとParseError: syntax error, unexpected 'echo' (T_ECHO)になってしまうんですね。なんですか(T_ECHO)って。