break continue goto文の使いどころ
break
breakはループやswitchを中止する時に使います。引数に整数を指定すると、その数値に対応する、入れ子にされた数のループ構造中から抜け出します。
// break |
$a=array('jQuery','Perl','css'); |
foreach($a as $key => $val){ |
if($val=='Perl'){ |
echo '「Perlを取得」'; |
break; |
} |
echo '「'.$val.'」'; |
} |
実行結果:「jQuery」「Perlを取得」
foreachは配列の中身(要素)を順番に取り出して処理し、無くなると終了します。上記では配列の一番目である「jQuery」要素はそのままecho(エコー)されます。二番目の「Perl」要素はif文でキャッチされて「Perlを取得」とエコーし、次にbreakでforeachを中止します。三番目の「css」要素は二番目で中止されたため、どこにもエコーされません。
// break |
$a="JAVA"; |
switch($a){ |
case 'script': |
echo "「script」です。";break; |
case 'JAVA': |
echo "「JAVA」です。";break; |
case 'style': |
echo "「style」です。";break; |
} |
実行結果:「JAVA」です。
gotoやcontinueではなく、breakを用いた例です。$aに「JAVA」を指定しているため、上から二つ目の「case」にキャッチされて、”「JAVA」です。”とエコーし、次のbreakによってswitchを終了しています。
continue
continueはループの途中で次のループをさせる場合に使います。引数に整数を指定すると、その数値に応じた数の入れ子になったloop構造の終了地点までスキップし、次のloopへと移ります。loop内にswitchが存在するケースで、continue 2を指定した場合、外側のloopの次の処理から継続します。
// continue |
$a=array(1,2,3,4,5); |
foreach($a as $key => $val){ |
if(!($val % 2)){ |
continue; |
} |
print '「奇数'.$val.'」'; |
} |
実行結果:「奇数1」「奇数3」「奇数5」
gotoやbreakではなく、continueを用いた例です。5行目は配列要素を2で割っていった余りが1か0なのかを判定しています。if文に論理否定演算子を使っているので、「1ではない」という意味になり、「0であれば」continueという処理になります。つまり、余りがなく、綺麗に割り切れてしまった値は偶数ということになり、偶数であれば処理が飛ばされ、奇数だけがprintされるという仕組みです。尚、剰余演算子(%)は、両方の値を整数に直してから使います。浮動小数点の剰余を求めるにはfmod()を使います。
// continue |
$a="Orange"; |
switch($a){ |
case 'Apple': |
print "「Apple」です。";continue; |
case 'Orange': |
print "「Orange」です。";continue; |
case 'Banana': |
print "「Banana」です。";continue; |
} |
実行結果:「Orange」です。
breakの代わりにcontinueを使った例です。文字が入れ替わっただけです。
goto
// goto |
$a=array('swimming','marathon','tennis'); |
foreach($a as $key => $val){ |
if($val=="marathon"){ |
goto check; |
} |
echo '「'.$val.'」'; |
} |
check: |
echo '「gotoで移動した配列要素のmarathonです。」'; |
実行結果:「swimming」「gotoで移動した配列要素のmarathonです。」
continueやbreakではなく、gotoを用いた例です。一番目の「swimming」要素は通常通り表示されます。二番目の「marathon」要素はif文でキャッチされて、gotoで指定した「check」のある部分まで処理を飛ばされます。この「check」というのは任意につけられる名前で、ジャンプ先にはこの名前とその直後にコロンをつけて指定します。gotoは無条件に処理を移動させますが、関数やメソッド、loop中(while、for、foreach)、switch文の中に飛ばすことはできません。また、同じファイル上でなければなりません。反対にloop中やswitch文からは抜け出すことができます。