PHPのswitch文をコロン構文で書く時の注意点

  • PHP

HTML に PHP を組み込む時、if、for、switch などの制御文の終了が分かりやすいようにコロン構文で書くことが多いと思います。この時、終了は endif、endfor、endswitch 等になります。

<?php switch ( $hoge ): ?>
    ...
<?php endswitch; ?>

この時、人それぞれですがコードの可読性を上げるために case を PHP タグで分割して書くとエラーになるという現象がありました。

:これだと画面が真っ白になる

<?php switch ( $hoge ): ?>
    <?php case 'foo': ?>
    ...
<?php endswitch; ?> 

原因

switch と case の間で余白を含む何らかが出力されるとエラーになってしまうようです。先ほど挙げた例では、改行やインデントを付けたことによって case の前に余計なものが入っているとしてエラーになっていました。エラー内容が表示されないので、なかなか気づきにくいです…
phpマニュアル:http://php.net/manual/ja/control-structures.alternative-syntax.php

解決策

公式マニュアルのように switch と case の間の余白を消すというのも一つの手です。ただ可読性を上げるためにインデントや改行を付けているのに、それを取ってしまうならコロン構文を使う意味が少し薄れてしまいます。

他の方法としては、一つのphpブロックで完結させるか、最初のcase文だけ同じphpブロックに入れておくくらいしかなさそうです。

<?php 
    switch ( $hoge ): 
        case 'foo':
?>
    ...
<?php endswitch; ?>


HTML と合わせると多少見にくいですが、仕方がないですね。