実際にswitchステートメントでcontinue
キーワードを使用できることに気づきましたが、PHPでは、期待どおりに動作しません。
PHPで失敗した場合、失敗した他の言語の数を知っているのは誰ですか?言語を頻繁に切り替える場合、コードが期待どおりに動作しない場合、これは問題になる可能性があります。
その場合、switchステートメントでcontinue
を使用しないでください。
PHP(5.2.17)は失敗します:
for($p = 0; $p < 8; $p++){
switch($p){
case 5:
print"($p)";
continue;
print"*"; // just for testing...
break;
case 6:
print"($p)";
continue;
print"*";
break;
}
print"$p\r\n";
}
/*
Output:
0
1
2
3
4
(5)5
(6)6
7
*/
C++は期待どおりに動作するようです(forループの終わりにジャンプします)。
for(int p = 0; p < 8; p++){
switch(p){
case 5:
cout << "(" << p << ")";
continue;
cout << "*"; // just for testing...
break;
case 6:
cout << "(" << p << ")";
continue;
cout << "*";
break;
}
cout << p << "\r\n";
}
/*
Output:
0
1
2
3
4
(5)(6)7
*/
残念ながら、continue
ステートメントを使用する場合、break
とPHP
はswitch
でも同じです。
PHP
を他の言語での体験を台無しにせず、必要な場所でcontinue
を使い続けてください。
continue 2
を使用して、switchステートメントを囲むループの次の反復に進みます。
編集:
$foo = 'Hello';
for ($p = 0; $p < 8; $p++) {
switch($p) {
case 3:
if ($foo === 'Hello') {
echo $foo;
break;
} else {
continue 2;
}
default:
echo "Sleeping...<br>";
continue 2;
}
echo "World!";
break;
}
//This will print: Sleeping... Sleeping... Sleeping... Hello World!
PHP continue
ステートメント のドキュメントはこれを明確にします:
注:PHPでは、switchステートメントは続行。
異なる言語が同じキーワードを微妙に異なる意味を与えることを知っているべきであり、PHP continue
がC++ continue
と同じように動作することを前提としないでください。
C++では機能しないPHP continue
でswitch
が意味をなす場合は、それを使用してください。
PHPで機能しないC++ continue
でswitch
が意味をなす場合は、それを使用してください。
PHPマニュアル で警告されているように:
「PHPでは、switchステートメントは続行するためのループ構造と見なされます。」
したがって、continueを使用すると、forループではなく、switchステートメントから抜け出します。言語間で同様の構文を想定することの危険性。
continue
ステートメントがループ内にネストされている場合、break
とswitch
は同じように動作しないことに注意することが重要です。 switch
ステートメントを使用して何かを評価し、条件が満たされた場合にループ内の次の項目に移動する場合は、continue 2
を使用する必要があります。この場合にbreak 2
を使用すると、for
ループ全体から抜け出します。これは、望ましいアクションではない可能性があります。
C++内で続行を使用するswitch / case
ループに埋め込まれた構造は完全に問題ありません。他のプログラミング言語で発生する誤動作のために、C++でスタイルを制限するべきではありません。
CおよびC++では、switch
ステートメントはif/else if
とlabels/goto
の洗練された組み合わせにすぎないため、continue
内でswitch
を使用するのははい。しかし、お気づきのように、CまたはC++に対してsimilarである他の言語では、期待どおりに動作しません。それは、構文に関してのみ似ているためです。意味論的なルールの場合、それらは非常に異なる野獣です。したがって、1つの言語で機能するものは、言語が似ていても、他の言語ではほとんど機能しません。