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

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

  • 写回答

7条回答 默认 最新

  • COCO_AS 2017-11-21 00:32
    关注

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

    执行顺序

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

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

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

    评论

报告相同问题?

悬赏问题

  • ¥15 Android STD快速启动
  • ¥15 如何使用simulink建立一个永磁同步直线电机模型?
  • ¥30 天体光谱图的的绘制并得到星表
  • ¥15 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动