Fatal error: ‘break’ not in the ‘loop’ or ‘switch’ contextとエラーが出たときの対処法

今回は久しぶりにPHPをバージョンアップしようとして詰まったのでメモしときます。

僕は普段PHPをいじるのはなにか必要な時だけです。

なので、日々プログラミングに勤しんでいる方にとってはちょっと古い内容かもしれませんが少なくとも僕と同じ環境の方には誰か書いて入れば役に立ちますw

PHPを5.XX系から7にしたときに

「Fatal error: ‘break’ not in the ‘loop’ or ‘switch’ context」

とエラーが表示されました。

ループ中でif内にbreak、contextを使うとこのエラーが出てしまうんだそうです。例としては以下のような使い方はあまりしないと思いますが、こんな時にエラーがでます。

 

for ($i = 0; $i < 5; $i++) {

if($no == 6){

break 1;

}

}

もう少し複雑な処理をする時に、便利だと思っていたんですがこのような使い方はできなくなりました。

 

一瞬、大幅な設計変更をしなければならないのか(;O;)

と思いましたが、なにか代わりとなる方法はないのかと思いさぐってみたところ、このようなときswitchを使えば同じように処理できました。

 

単純な比較

従来

if($i === 1){

break;

}

これから

switch ($i) {

case 1:
break 1;

}

 

両方が変数の場合

従来

if($no === $no_row){

break 1;

}

これから

switch ($no_2) {
case $no_row:

break 1;

}

複数の条件

&&やor

従来

if(preg_match(“/”.preg_quote(“$sarch”,”/”).”/”, $data) && $msg === “start” )){
break;

}

これから

switch ($msg) {
case start;
case preg_match(“/”.preg_quote(“$sarch”,”/”).”/”, $data):

break 1;

}

 

今回のようなエラーはwordpressでもプラグインによっては出る場合があるそうなので、PHP7に切り替えたときにエラーが出たらプラグインを探ってみましょう!

コメント

タイトルとURLをコピーしました