回首郑板桥
2017-11-20 17:13
采纳率: 0%
浏览 5.2k
已结题

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 类看到的,不常见的写法但是非常考基础。

8条回答 默认 最新

相关推荐 更多相似问题