PHP开发中常见的坑
1. switch/case
使用 switch 语句可以避免冗长的 if..elseif..else 代码块。但是一不小心,就会掉坑里。
1)当case为一个范围时
使用 0 < $num < 50,这种方式是不可以的,所以要用 0 < $num && $num < 50的方式,拆开写才可以
1 <?php 2 $a = 89; 3 switch ($a) { 4 case ($a < 60): 5 echo ‘不及格‘; 6 break; 7 case ($a < 80): 8 echo ‘中等‘; 9 break; 10 case ($a < 90): 11 echo ‘良‘; 12 break; 13 default: 14 echo ‘优秀‘; 15 break; 16 } 17 18 // 输出结果 19 // 良
2)当switch表达式中的值为0
1 <?php 2 $a = 0; 3 switch ($a) { 4 case ($a < 60): 5 echo ‘不及格‘; 6 break; 7 case ($a < 80): 8 echo ‘中等‘; 9 break; 10 case ($a < 90): 11 echo ‘良‘; 12 break; 13 default: 14 echo ‘优秀‘; 15 break; 16 } 17 // 输出结果 18 // 优秀
这个地方,如果按照if...else的思维,满足第一个case语句,然后直接输出:不及格。但是实际情况输出的是:优秀
分析:switch/case跟if...else条件语句的区别是,switch表达式的值是与case语句中的值作匹配的,并不是像if条件中的只要是true就执行
php里面的switch会转换case类型,使用的时候一定要注意。
注意:
1) switch/case 作的是松散比较。使用“==”进行比较的时候,尤其是string和int值比较时,会将字符串强转为int类型
2) 在使用switch的时候,应该保证比较值和每个case的类型一致,否则就可能出现不可预计的错误
2. in_array
3. 一个关于if else容易迷惑的问题