PHP里 switch case条件语句的问题

<?php 
$a = "abc"; 
switch ($a) {
case 0: 
echo "a 为 0";
break;
case "cdaf": 
echo "a 为 cdaf";
break;
case "abc": 
echo "a 为 abc";
break;
default:
echo "a 什么都不是";
break;
}
?>

为什么输出的结果是a为0
而不是a为abc?这个0有什么玄机呢?

呼如林
浏览 824回答 3
3回答

守候你守候我

这个问题应该从PHP作为动态脚本语言说起:动态语言的变量类型是随存储的变量而变化的,即变量类型是根据具体环境而进行变化的。字符串"abc",从楼主的意思来看可能指确切字符串,但是对于PHP存储的时候它是不能确定的,因为随着语义的变化,其所起的作用也会变化第一个case 0:,PHP脚本将常量0翻译为确切的整数,与字符串比较大小时,需要将字符串转换为整数。PHP脚本会将字符串abc,从十进制(默认)转换为数字,但是abc很明显不能代表十进制数,即转换失败,则PHP将结果置为0,如果将字符串表示为"0xabc",那么PHP脚本能够发现0x标识,将abc作为十六进制转换,所以能够得到abc标识的十六进制整数。如果楼主学过C,可以做一个简单比较:C中的case必须是数字常量,而不能是字符串,就因为C是变量类型确定的,运行时不能将确定的变量按语义随意转换。而PHP可以,因为PHP语言是动态的,变量类型是动态的。或者从PHP的例子中学习:如果一个文件将111111字符串(不是数字)存储到文件,然后从文件直接读取到变量$a,如下语法就可以将$a作为整数计算:0+$a

杨__羊羊

你所输出地是字符串,你直接把case 0:echo "a 为 0";break;这句给删掉,因为你所定义的是字符串,不能用数字的

叮当猫咪

PHP 中switch 的功能是:选择执行某个代码块;其工作原理如下:  1.对表达式(一般是变量)进行一次性计算;  2.用变量的值与switch结构中 case 的值进行比较;  3.如果变量值与case的值相等,则执行与该 case 关联的代码;  4.代码执行完后,break 语句阻止代码跳入下一个 case 中继续执行;  5.如果没有 与之匹配的case条件,则执行 default中的代码;  实例代码:123456789101112131415161718192021222324252627<?php&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//星期&nbsp;&nbsp;&nbsp;&nbsp;$week=2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//对星期进行匹配,输出对应的语句。&nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;($week){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;1:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"今天是周一,上班......";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;2:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"今天是周二,上班......";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;3:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"今天是周三,上班......";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;4:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"今天是周四,上班......";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;5:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"今天是周五,上班......";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"哈哈,今天是周末!!";&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//今天是周二,上班......?>&nbsp;
打开App,查看更多内容
随时随地看视频慕课网APP