べにやまぶろぐ

技術寄りの話を書くつもり

PHP での switch 文中の continue について

恥ずかしながらのエントリーですが…

PHP でループ回している最中に switch 文入れて条件に応じて処理を飛ばす(ループの先頭に戻る)つもりで下記のようなコードを書いたところ

<?php
foreach ($items as $item) {
  switch ($item->type) {
    case TYPE1:
      if(is_null($item->code)){
        continue;
      }
      ...
  }
}
?>

switch は抜けるもののループ内の処理は続行してしまい、はて…と思っていたのですが 公式ドキュメント を見ると思いっきり

注意: PHP では、continue の動作に関しては switch 文がループ構造とみなされるということに注意しましょう。

と書いてあり、こんなときは

continue 2;

などとしてレベルを指定するのだということを今更知るなど。

ちょっと気になったのが こちらのブログ で紹介されていた バグ で、continue 2 でメモリリークするというもの。使用する際は気に留めておく必要がありそうです。