码迷,mamicode.com
首页 > Web开发 > 详细

比较php中switch与if..elseif以及记录switch中的坑

时间:2018-11-07 17:47:46      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:之间   echo   if..else   常用   不同   src   ima   else   下一步   

在php中做条件判断,常用的是if和switch语句,虽然都能完成条件判断的任务,但是两者之间还是有不同的,请看代码:

     $b = 0;
     if( $b>=0 ){
          echo ‘$b>=0‘;
      }elseif( $b>=10 ) {
          echo ‘$b>=10‘;
      }else {
          echo ‘$b =0‘;
      }
    $b = 0;
     switch($b) {
         case $b>=0:
              echo ‘$b>=0‘;
              break;
         case $b>=10:
              echo ‘$b>=10‘;
              break;
          default:
              echo ‘$b = 0‘;
        }

代码执行的结果如下:
技术分享图片
再来看另外一段代码

    $b = 0; 
    switch( $b ) {
          case empty($b): 
             echo ‘$b是as‘;
             break;
          case "fs":       
             echo  ‘$b是fs‘;
             break;
          default :
              echo ‘这是个美丽的错误‘;
      }

输入结果如下:
技术分享图片
为什么会有这样的差异呢?

这是因为switch在执行的时候,如果是用不同类型的参数进行比较,会把case 条件以及参数进行类型转换,转成布尔类型,再进行下一步的比较, 比如$b=0为false, $b>=10也为false;第二段代码中的$b=0为false,"fs"会被intval转换为false,因此得到了上面我们看到的结果.
有了这个差异在这里,是不是我们尽量别用switch了?其实不然,如果简单的常量比较,使用switch不仅代码结构清晰,而且效率也比if语句高,这一点跟底层算法有关.
另外在使用switch的时候一定记得break,否则所有的代码都会被执行.就不存在判断的意义了.

比较php中switch与if..elseif以及记录switch中的坑

标签:之间   echo   if..else   常用   不同   src   ima   else   下一步   

原文地址:https://www.cnblogs.com/MrBear/p/9923852.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!