PHPでView側のコーディングをしていると
Parse error: syntax error, unexpected token “endforeach”, expecting “elseif” or “else” or “endif”
というエラーが出てしまうことがあります。
そんな時に確認してほしいことをまとめました。
endforach, endifなら「;」、それ以外なら「:」が語尾に書かれているか
通常構文ではなく代替構文で書いている場合、全部コロン形式で統一する必要があります。
つまり、if文でいうと
- if(…):
- elseif(…):
- else(…):
- endif;
という感じです。
endif以外は全部コロン(:)を付ける必要があり、
最後に、endif(;)だけはここで終了の意味のセミコロン(;)を書きます。
もし、endifでセミコロン(;)を書き忘れるとまだ処理が続いていると認識します。
なので、
①foreach、if、elseif、else の後ろにコロン(:)が付いているか
②endforeach、endif の後ろにセミコロン(;)が付いているか
を確認しましょう。
波括弧({ })と混在させていないか
普通のPHPファイルのif文と同じく、波括弧({ })も使えます。
なのでif文で言えば、
<?php … { ?>
// 処理
<? } ?>
と書くことが出来ます。
これを
<?php … { ?>
// 処理
<? endif; ?>
なんて書いてしまうと違うものですがエラーになってしまいます。
このように、波括弧と代替構文を混在させていないかも、念のため一応確認しておきましょう。
短縮タグになっていないか
View側ので途中でPHPのコードを書くときは <?php … ?>と書きますよね。
それが <? … ?> という短縮タグとなっていると、環境によって無効なことがあります。
また、<?= … ?> は文字列を表示するための短縮コードなのでこちらも使ってはいけません。
なので上記2つの短縮コードになっていないか確認しましょう。
そして、<?php … ?> で統一することを強くお勧めします!
まとめ
- 代替構文の場合、語尾の文字に適切なものが書かれているか
- 波括弧と混在させていないか
- 短縮タグになっていないか
エラーの正体は簡単なもののことが多いので、よく確認すればすぐに直せるものが多いです。
なお、短縮タグは検索で発見することが難しいので、きちんと確認することが必要ですね。
この記事が参考になってもらえれば嬉しいです。

