foreach 循环体中使用switch...continue

按照我的理解,switch...case中使用的continue是对外层的循环体作用的,continue后面的语句不会执行,程序会跳转到下一次循环。

但是,下面的执行结果不能理解,请各位大大帮忙解释一下,谢谢了!

代码清单:


 $array = ['nofile.php', 'demo.php'];
foreach ($array as $v) {
    echo '$v:'. $v. BS;
    switch (true) {
        case false === $v = realpath(filter_var($v)):
        case !is_file($v):
        case !is_readable($v):
            echo $v. ' in case'. BS;
            continue; // or return false, throw new InvalidArgumentException
        default:
            echo 'break'. BS;
            break;
    }
    //...
    echo $v. ' in foreach'. BS;
}

输出结果:

$ php demo.php
$v:nofile.php
 in case
 in foreach
$v:demo.php
break
/var/www/html/test/demo.php in foreach

第一个 case 做了什么,为什么当 $v 这个文件不存在时,$v会变成false;
当$v这个文件不存在时,会执行到 continue ,然后为什么又执行了switch后面的语句,in casein foreach都有打印。

这个例子是从php manual - CURLFile 类看到的,不常见的写法但是非常考基础。

第一个 case 做了什么,为什么当 $v 这个文件不存在时,$v会编程false

执行顺序

1、解析: realpath(filter_var($v))
2、赋值:  $v = 上面表达式的结果
3、比较 false === $v

当$v这个文件不存在时,会执行到 continue ,然后为什么又执行了switch后面的语句

不符合任何一个case时,会执行default, 自然也就能没有 continue什么事,也就会执行swicth后面的语句

不符合任何一个case时,会执行default, 自然也就能没有 continue什么事,也就会执行switch后面的语句

没有编辑功能 够差劲的

case的语法错了吧。
小括号里面直接给true,你让case怎么区分分支?
switch的case里面某一个分支执行成功后一定要用break;防止事件流交叉。


还是有疑问,有更多的回答吗

你好像套来套去,乱套了

PHP 中 continue 的用法
continue 在循环结构用用来跳过本次循环中剩余的代码并在条件求值为真时开始执行下一次循环。
注释: 注意在 PHP 中 switch 语句被认为是可以使用 continue 的一种循环结构。
所以你在switch里面使用continue只是跳过了switch语法,外部循环依旧执行。

望采纳!!!

PHP中的foreach和Java语言中的foreach的语法一致吗?