php switch case的

首先说明,这不是一个bug。应该说是一个比较容易中招的陷阱。
今天使用switch遇到一个问题,代码如下:

<?php

$num = 0;
switch ($price) {
    case $price <= 100:
        $price_between = "100以下";
        break;
    case $price < 1000:
        $price_between = "800-1000";
        break;
    default:
        $price_between = "1000以上";
        break;
}

echo $price_between;
//1000以上

当$price等于0时最终的结果不是预期的”100以下”,而是”1000以上”。

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

a.当$price大于0时,switch位置的条件为“真” true,然后用true 和 case 位置的条件作比较。这时程序是没有问题的,因为只要case位置的条件为true语句就跳出了。

b.当$price等于0时,就需要注意了。这个时候switch位置的条件为“假” false,语句继续执行的时候,只有当 case 位置的条件也为false 程序才会执行 case 冒号位置后的程序。而事实是 case 位置的所有调教都为“真”,所以最终的结果是执行default冒号后的语句。

下面的程序是如何处理这个问题的正确方法。

<?php

$price = 0;
switch (TRUE) {
    case $price <= 100:
        $price_between = "100以下";
        break;
    case $price < 1000:
        $price_between = "800-1000";
        break;
    default:
        $price_between = "1000以上";
        break;
}

echo $price_between;
//100以下

把 switch 位置的值由 $price 改成了 true ,这样就可以了。```php
<?php

$price = 0;
switch (TRUE) {
case $price <= 100:
$price_between = “100以下”;
break;
case $price < 1000:
$price_between = “800-1000”;
break;
default:
$price_between = “1000以上”;
break;
}

echo $price_between;
//100以下
```

出处:www.l1mn.com

原文标题:php switch case的

原文地址:https://www.l1mn.com/p/kjqpo4.html

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

分类:phpbug
标签:phpbug
评论

皖ICP备2023023451号

Copyright © L1MN.COM 联系方式:l1mnfw@163.com