gpt4 book ai didi

php - 为什么 `switch` 被认为是 `continue` 的循环结构?

转载 作者:IT王子 更新时间:2023-10-29 00:03:58 26 4
gpt4 key购买 nike

我只是假设以下几点:

foreach ($arr as $key => $value) {
switch($key) {
// ... some other cases
default:
continue;
// ^== assumption: move on to the next iteration of the foreach
// actual PHP: treat this continue just like a break
}
// ...
}

但实际上,根据documentation for continue :

the switch statement is considered a looping structure for the purposes of continue.

PHP 语言设计者有这样的选择吗?据我所知,switch 不是一个循环控制结构,那么为什么在这种情况下把它当作一个呢?

最佳答案

我能想到的最好的解释是 PHP 认为它是一个循环结构,因此它适合使用 continuebreak 的模型。 switch 文档除了

之外没有进一步说明

Note that unlike some other languages, the continue statement applies to switch and acts similar to break. If you have a switch inside a loop and wish to continue to the next iteration of the outer loop, use continue 2.

所以也许是因为,就像一个循环,它停止了其结构中其余代码的执行。

但是,当您使用多个级别时,这两个级别的行为会大不相同:

继续没有关卡

<?php
for($i=0;$i<5;$i++) {
switch($i) {
case 2:
continue;
default:
echo $i, "\n";
}
echo "Finished with {$i}\n";
}
//0
//Finished with 0
//1
//Finished with 1
//Finished with 2
//3
//Finished with 3
//4
//Finished with 4

继续关卡

<?php
for($i=0;$i<5;$i++) {
switch($i) {
case 2:
continue 2;
default:
echo $i, "\n";
}
echo "Finished with {$i}\n";
}
//0
//Finished with 0
//1
//Finished with 1
//3
//Finished with 3
//4
//Finished with 4

break 没有关卡

<?php
for($i=0;$i<5;$i++) {
switch($i) {
case 2:
break;
default:
echo $i, "\n";
}
echo "Finished with {$i}\n";
}
//0
//Finished with 0
//1
//Finished with 1
//Finished with 2
//3
//Finished with 3
//4
//Finished with 4

打破关卡

<?php
for($i=0;$i<5;$i++) {
switch($i) {
case 2:
break 2;
default:
echo $i, "\n";
}
echo "Finished with {$i}\n";
}
//0
//Finished with 0
//1
//Finished with 1

关于php - 为什么 `switch` 被认为是 `continue` 的循环结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9024271/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com