按照我的理解,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 case
和in foreach
都有打印。
这个例子是从php manual - CURLFile 类看到的,不常见的写法但是非常考基础。