php switch case的"bug"
首先说明,这不是一个bug。应该说是一个比较容易中招的陷阱。
? 1 <?php 2 3 4 $num = 0; 5 switch ($price) { 6 case $price <= 100: 7 $price_between = "100以下" 8 break 9 $price < 1000: 10 $price_between = "800-1000"11 12 default: 13 $price_between = "1000以上"14 15 } 16 17 echo $price_between18 //1000以上 ? ? <?php $num = 0; echo $price_between; 当$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冒号后的语句。 下面的程序是如何处理这个问题的正确方法。 ? 3 $price = 0 4 switch (TRUE 5 6 7 8 9 10 11 12 13 14 15 16 100以下 ? ? <?php $price = 0; echo $price_between; 把 switch 位置的值由 $price 改成了 true ,这样就可以了。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |