PHP流程控制之分支结构switch语句的使用
分支结构switch语句的使用
还记得我们最开始讲了这么一个故事:
王同学家里头特别有钱,所以他的行程方式和正常人的又有些不一样。
他的出行方式呢有6种,如下:
1,司机开车
2,民航
3,自己家的专机
4,火车动车
5,骑马
6,游轮
他的方式有6种,而骰子也真好有6面。所以,我们用if...elseif...的判断方式可以实现,但是效率太低了。
还有其他更好的方式吗?我们可以使用到一种方式就是:switch...case语法。
switch...case的语法结构如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?php switch (变量){ //字符串,整型 case 具体值: 执行代码; break ; case 具体值2: 执行代码2; break ; case 具体值3: 执行代码3; break ; default : } ?> |
switch后放需要判断的变量,而case后是放结果。switch后变值为多少,case的值写的与switch变量执相同段的代码。
上面的break是可选的
上面的default也是可选的
不要在case 后面写成分号,后面是冒号:
不要在case后面写判断区间,如($foo > 20 或者 $foo == 30)
switch里面在变量最好是 整型,字符串,因为布尔判断更适合if...else..
我们用流程图来表示的话结果就如下图所示:
上节课中我们用到了rand函数,那我们现在来用rand实现王思总同学的问题选择:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <?php //定义出行工具 $tool =rand(1,6); switch ( $tool ){ case 1: echo '司机开车' ; break ; case 2: echo '民航' ; break ; case 3: echo '自己家的专机' ; break ; case 4: echo '火车动车' ; break ; case 5: echo '骑马' ; break ; case 6: echo '游轮' ; break ; } ?> |
上面的代码我们只需要简单修改,就可以实现我们在微信上面玩的一个小游戏简单的家务骰子和剪刀石头布。你想想?
你再做做实验:
我们可以把 case 1 代码段中的break去掉,你再试试,什么效果?
我们再来写一个简单的星期判断,写法也可以变的怪一些哟:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <?php //得到今天是星期几的英文简称 $day = date ( 'D' ); switch ( $day ){ //拿学校举例,我们让星期一、二、三是校长日 case 'Mon' : case 'Tue' : case 'Wed' : echo '校长日' ; break ; echo '星期三' ; break ; case 'Thu' : echo '星期四' ; break ; case 'Fri' : echo '星期五' ; break ; default : echo '周末,周末过的比周一到周五还要累<br />' ; }; ?> |
自己做实验试试:
上面的例子发现,不匹配的时候就执行了defaultk吧?广州大理石机械构件
当然你也可以这样,不过这种写太太累了,没有if...else更加简单。我们不用swith...case来做true和false判断
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?php //用swith...case来完成bool判断 $bool =true; switch ( $bool ){ case true: case false: } /*********分隔线*******************/ if ( $bool ){ } else { } ?> |
世界上最痴心的等待就是我是case你是switch, 我一只默默的等待,可是你却不选我!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】博客园携手 AI 驱动开发工具商 Chat2DB 推出联合终身会员
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 对象分配(Alloc)底层原理浅谈
· 聊一聊 C#异步 任务延续的三种底层玩法
· 敏捷开发:如何高效开每日站会
· 为什么 .NET8线程池 容易引发线程饥饿
· golang自带的死锁检测并非银弹
· 2024年终总结:5000 Star,10w 下载量,这是我交出的开源答卷
· 一个适用于 .NET 的开源整洁架构项目模板
· AI Editor 真的被惊到了
· API 风格选对了,文档写好了,项目就成功了一半!
· 【开源】C#上位机必备高效数据转换助手