PHPのswitch文で謎エラー

久々にフルスクラッチ開発で、テンプレートにPHPコードをガシガシ書いていたら、switch文による分岐のところで、

「Parse error: syntax error, unexpected ‘
‘, expecting endswitch (T_ENDSWITCH) or case (T_CASE) or default (T_DEFAULT)…」

こんな妙なエラーが出て、消えてくれなくて困った。

マンガやコミックそれに小説をパソコンやスマホで楽しみたいなら、renta(レンタ)やひかりブックスなど、電子書籍や電子ブックと貸本などのサービスが便利でよく利用されています。

注目のスポンサーリンク

テンプレート上でしか起きない現象

何をしていたかというと、テンプレートの中なので、制御文は一般的なカッコではなくて、

<!--?php switch($act): ?-->
    <!--?php case 1: /* 一つ目の処理*/ ?-->
        :
    <!--?php break; ?-->
    <!--?php case 2: /* 二つ目の処理 */ ?-->
        :
<!--?php break; ?-->
<!--?php endswitch; ?-->

という「ほにゃらら():」~「endほにゃらら」の形式で書いていたのだが、エラーは最初の「case 1:」の行で発生する。
色々試したが変化が無いので、仕方なくググってみたところ、


https://bugs.php.net/bug.php?id=25667

Actually this is not bug. You can’t have anything between
switch()..case.. ever. It’s not valid.

(意訳)いやいやバグじゃないズラよ。switchとcase文の間には余計なもんは入れちゃいけないっていう仕様なんだべ。


てな話があった。
ん?どゆこと?と思いつつ、試しに、

<!--?php switch($act): ?-->
<!--?php case 1: /* 一つ目の処理*/ ?-->(←先頭にあったインデントの空白をとっただけ)

という感じに、switchと最初のcase文の間に空白が入らないようにすると、エラーが消えました…。

構文が甘々スイーツ脳なPHPで、いきなりこんな仕様持ち出されたってわかるかいってんだ。

注目のスポンサーリンク