@[TOC](php switch(0) 的相关问题原因)

最近学习php 遇到一个很有意思的bug,做了一些了解之后,记录一下。

看例子:

<?php
$type = 0;
echo '案例一:  ';
switch ($type) {case $type < 1:echo '$type in $type < 1';break;case $type < 2:echo '$type in $type < 2';break;default:echo '$type in default';break;
};
echo '<br>';
echo '案例二:  ';
switch ($type) {case $type < 1:echo '$type in $type < 1';break;case $type > 2:echo '$type in $type > 2';break;default:echo '$type in default';break;
};echo '<br>';
echo '案例三:  ';
switch ($type) {case 'apple':echo '$type in apple';break;case 'orange':echo '$type in orange';break;default:echo '$type in default';break;
};echo '<br>';
echo '案例四:  ';
switch ($type) {case '0Zero':echo '$type in 0Zero';break;case 'orange':echo '$type in orange';break;default:echo '$type in default';break;
};?>

上面代码的运行结果是:

案例一: $type in default
案例二: $type in $type > 2
案例三: $type in apple
案例四: $type in 0Zero

造成这些现象的原因其实是switch case在执行的流程是 switch 位置的条件和 case 位置的条件做比较,然后再继续执行程序。

当$type等于0的时候 switch位置的条件为false,语句继续执行的时候,只有当 case 位置的条件也为false 程序才会执行 case 冒号位置后的程序。

例如
案例一:case $type < 1 和 case $type < 2 的条件返回为true,与switch位置条件false不符,匹配不上,所以走的是default路径。

案例二:case $type < 1 的条件返回为true,case $type > 2 的条件返回为false,case 2 与switch条件匹配上了,所以走的case $type > 2

案例三:case ‘apple’ 是字符串 ,在判断之前会自动转换类型 成 int类型,这时候就是false,与switch处条件匹配,程序走入case ‘apple’

案例四:case ‘0Zero’ 是字符串 ,在判断之前会自动转换类型 成 int类型,转换之后是0,与switch处条件匹配,程序走入case ‘0Zero’ ,可以让$type = 1 ; 然后把分支改成‘1Zero’,也会进入‘1Zero’分支

如果用switch语句,并且存在入参数等于0的情况下,应该像下面那样写:

$type = 0;
switch (true) {case $type < 1:echo '$type in $type < 1';break;case $type < 2:echo '$type in $type < 2';break;default:echo '$type in default';break;
};

把入参的地方换成true 就可以了。

php switch(0) 的相关问题原因相关推荐

  1. 有关auocad编程和CadLib4.0的相关总结

    近期做的项目要对autodesk公司的autocad软件生成的.dwg和.dxf文件进行操作,所以在网上查阅了相关知识,以下是我总结的:    1.autocad有二次开发编程的,如ObjectArx ...

  2. MySQL8.0内存相关参数介绍

    MySQL8.0内存相关参数介绍 首先我们给出MySQL内存使用的计算公式: MySQL理论上使用的内存 = 全局共享内存 + max_connections×线程独享内存. 也就是:innodb_b ...

  3. lk部分没有msm8937相关目录原因(指向msm8952)

    下面在device目录过滤一下项目用到的"LK"的说明,发现在./msm8937_32/BoardConfig.mk和 ./msm8937_64/BoardConfig.mk都有配 ...

  4. 关于在英伟达官网下载 CUDA 10.0 win10版本失败原因探索

    关于在英伟达官网下载 CUDA 10.0 win10版本失败原因探索: 1.尝试了比较多的途径去下载,一致以为是网速问题 和 下载软件的问题,但尝试许多改变皆无果: 2.后来在贴吧找到帖子说之前9.0 ...

  5. mysql8.0最低需要多少内存_MySQL8.0内存相关参数总结

    MySQL理论上使用的内存 = 全局共享内存 + max_connections×线程独享内存. 也就是:innodb_buffer_pool_size + innodb_log_buffer_siz ...

  6. 宝付:医保账户为0原来是这些原因造成的

    宝付:医保账户为0原来是这些原因造成的.社保卡是我们生活中必不可少的东西,但是为什么有的人里面有钱,而有的有呢!相信很多朋友不是很了解,下面就由宝付为大家介绍一下吧. 一.只缴纳了养老保险,没有缴纳医 ...

  7. web2.0及其相关技术

    一    什么是web2.0? 1     产生的背景 1)        互联网质的变化-互联网正在升级换代 截至2005 年12 月底,全球有9 亿多互联网用户,中国有1.11 亿多互联网用户. ...

  8. 二手房买卖中介佣金降0.5% 相关费用总额降80%

    二手房买卖中介佣金降0.5% 相关费用总额降80% 作者:未知 更新时间:2011-8-30 11:22:02 来源:√三亚房地产信息网-新闻频道 [字号: 大 中 小] 本条信息浏览人次共有19次 ...

  9. 无效0_12位浙江高考生成绩被教育考试院判定无效,0分收场的原因很可惜

    . 高考结束了很长一段时间,距离最终分数放榜时间也越来越近了,可以看到目前来讲很多省份正在有序的阅卷之中,不少科目的阅卷已经接近了尾声,面对后续的数据统计与核对以后,在25号前后,全国多地将陆续公布分 ...

最新文章

  1. va_list和va_start和((A*)0)-a
  2. 发那科机器人注油_如何给发那科机器人做三年保养?干货!
  3. java 日志脱敏框架 sensitive,优雅的打印脱敏日志
  4. 【视频讲解】基础实验4-2.1 树的同构 (25 分)
  5. springboot-添加拦截器
  6. 玩转keybd_event
  7. CGContextRef使用简要教程
  8. 【STM32】标准库 菜鸟入门教程(1)初识最小系统
  9. Mac如何关闭开机启动项
  10. 预测股票涨跌看什么指标,如何预测明天股票走势
  11. 8、MySQL Workbench导入数据库提示Failed to open required defaults file:xxx.cnf
  12. openlayers 图层刷新问题
  13. 阿里云OSS对象存储服务的使用
  14. 360密盘两月即被破解 10万年成笑话
  15. android 心形进度条,心形进度条
  16. 一分钟读懂:天使投资 vs. 风险投资 vs. 私募股权融资
  17. ubuntu安装pr_Ubuntu16.04安装wps办公软件解决文字缺失
  18. Explaindio Video Creator Platinum(简称EVC) 3.042 Windows中文白金版MG动画2D和3D动画解说动画手绘白板动画视频制作软件
  19. nvm之node版本切换
  20. uniCloud发起小票打印,uniapp小票打印实现方案

热门文章

  1. 【渝粤题库】广东开放大学photoshop图像处理 形成性考核
  2. Visual Graph图形平台的使用
  3. 关于Charles无法抓包问题
  4. 联想Tab M10 FHD PLUS (TB-X606F)解锁BL,获取root权限(无需第三方recovery),刷xp框架(太极-阳)适用大部分联发科CPU(国际版rom底包)
  5. 聚焦2023北京安博会,超高清安防应用将成潮流
  6. 马良建模学习笔记——软包制作四
  7. 初探fastJson的AutoType
  8. 常见函数的四种类型有哪些
  9. 网易云VIP音乐NCM文件转MP3,C语言版本
  10. 【Arthas 专题篇.一】Arthas 项目概况