php switch(0) 的相关问题原因
@[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) 的相关问题原因相关推荐
- 有关auocad编程和CadLib4.0的相关总结
近期做的项目要对autodesk公司的autocad软件生成的.dwg和.dxf文件进行操作,所以在网上查阅了相关知识,以下是我总结的: 1.autocad有二次开发编程的,如ObjectArx ...
- MySQL8.0内存相关参数介绍
MySQL8.0内存相关参数介绍 首先我们给出MySQL内存使用的计算公式: MySQL理论上使用的内存 = 全局共享内存 + max_connections×线程独享内存. 也就是:innodb_b ...
- lk部分没有msm8937相关目录原因(指向msm8952)
下面在device目录过滤一下项目用到的"LK"的说明,发现在./msm8937_32/BoardConfig.mk和 ./msm8937_64/BoardConfig.mk都有配 ...
- 关于在英伟达官网下载 CUDA 10.0 win10版本失败原因探索
关于在英伟达官网下载 CUDA 10.0 win10版本失败原因探索: 1.尝试了比较多的途径去下载,一致以为是网速问题 和 下载软件的问题,但尝试许多改变皆无果: 2.后来在贴吧找到帖子说之前9.0 ...
- mysql8.0最低需要多少内存_MySQL8.0内存相关参数总结
MySQL理论上使用的内存 = 全局共享内存 + max_connections×线程独享内存. 也就是:innodb_buffer_pool_size + innodb_log_buffer_siz ...
- 宝付:医保账户为0原来是这些原因造成的
宝付:医保账户为0原来是这些原因造成的.社保卡是我们生活中必不可少的东西,但是为什么有的人里面有钱,而有的有呢!相信很多朋友不是很了解,下面就由宝付为大家介绍一下吧. 一.只缴纳了养老保险,没有缴纳医 ...
- web2.0及其相关技术
一 什么是web2.0? 1 产生的背景 1) 互联网质的变化-互联网正在升级换代 截至2005 年12 月底,全球有9 亿多互联网用户,中国有1.11 亿多互联网用户. ...
- 二手房买卖中介佣金降0.5% 相关费用总额降80%
二手房买卖中介佣金降0.5% 相关费用总额降80% 作者:未知 更新时间:2011-8-30 11:22:02 来源:√三亚房地产信息网-新闻频道 [字号: 大 中 小] 本条信息浏览人次共有19次 ...
- 无效0_12位浙江高考生成绩被教育考试院判定无效,0分收场的原因很可惜
. 高考结束了很长一段时间,距离最终分数放榜时间也越来越近了,可以看到目前来讲很多省份正在有序的阅卷之中,不少科目的阅卷已经接近了尾声,面对后续的数据统计与核对以后,在25号前后,全国多地将陆续公布分 ...
最新文章
- va_list和va_start和((A*)0)-a
- 发那科机器人注油_如何给发那科机器人做三年保养?干货!
- java 日志脱敏框架 sensitive,优雅的打印脱敏日志
- 【视频讲解】基础实验4-2.1 树的同构 (25 分)
- springboot-添加拦截器
- 玩转keybd_event
- CGContextRef使用简要教程
- 【STM32】标准库 菜鸟入门教程(1)初识最小系统
- Mac如何关闭开机启动项
- 预测股票涨跌看什么指标,如何预测明天股票走势
- 8、MySQL Workbench导入数据库提示Failed to open required defaults file:xxx.cnf
- openlayers 图层刷新问题
- 阿里云OSS对象存储服务的使用
- 360密盘两月即被破解 10万年成笑话
- android 心形进度条,心形进度条
- 一分钟读懂:天使投资 vs. 风险投资 vs. 私募股权融资
- ubuntu安装pr_Ubuntu16.04安装wps办公软件解决文字缺失
- Explaindio Video Creator Platinum(简称EVC) 3.042 Windows中文白金版MG动画2D和3D动画解说动画手绘白板动画视频制作软件
- nvm之node版本切换
- uniCloud发起小票打印,uniapp小票打印实现方案
热门文章
- 【渝粤题库】广东开放大学photoshop图像处理 形成性考核
- Visual Graph图形平台的使用
- 关于Charles无法抓包问题
- 联想Tab M10 FHD PLUS (TB-X606F)解锁BL,获取root权限(无需第三方recovery),刷xp框架(太极-阳)适用大部分联发科CPU(国际版rom底包)
- 聚焦2023北京安博会,超高清安防应用将成潮流
- 马良建模学习笔记——软包制作四
- 初探fastJson的AutoType
- 常见函数的四种类型有哪些
- 网易云VIP音乐NCM文件转MP3,C语言版本
- 【Arthas 专题篇.一】Arthas 项目概况