宇讯一资源

php的switch-case语句中为0的问题

发布于2021年10月14日 | 暂无评论 | 73阅读 | wordpress
 $ii=0;
    switch($ii){
        case $ii > 300:
           echo 'aa';
          // break;
          // var_dump($ii>=300);
          //var_dump((int)300);
        case 33:
            echo 'bb';
           // break;
        case 0:
            echo 'dd';
        default:
            echo 'cc';
        //var_dump($ii) ;
        // var_dump(300);
        // var_dump($ii>300);
    }
    // 0不能用于case 比较;可以用用if语句
    // if($ii>300){
    //     echo 'yy';
    // }else{
    //     echo 'dd';
    // }

问题的原因就是switch-case在执行的流程是 switch 位置的条件和 case 位置的条件做比较,再继续执行程序。

当$ii大于0时

switch位置的条件为"真"(true),然后用true 和 case 位置的条件作比较。这时程序是没有问题的,因为只要case位置的条件为true语句就跳出了。

当$ii等于0时

这个时候switch位置的条件为"假"(false),语句继续执行的时候,只有当 case 位置的条件也为false 程序才会执行 case 冒号位置后的程序。而事实是 case 位置的所有条件都为"假"(false),所以最终的结果是执行第一个case冒号后的语句,即输出结果为。

所以我们只需要把switch里面的值为ture时,结果就是预想的结果了。

暂无评论

发布评论