PHP里 switch case条件语句的问题

<?php$a="abc";switch($a){case0:echo"a为0";break;case"cdaf":echo"a为cdaf";break;case"abc... <?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有什么玄机呢?

ps:我是菜鸟,请大虾们说明白点^_^
展开
 我来答
eee2356eee
推荐于2018-02-12 · TA获得超过1139个赞
知道小有建树答主
回答量:389
采纳率:0%
帮助的人:606万
展开全部
佩服楼主 很细心哪!

这个问题应该从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
上述表达式得到的结果也可以作为动态语言的一个变现来看
IT互联天下
推荐于2016-10-26 · 知道合伙人软件行家
IT互联天下
知道合伙人软件行家
采纳数:1437 获赞数:5161
PHP开发工程师

向TA提问 私信TA
展开全部

  PHP 中switch 的功能是:选择执行某个代码块;其工作原理如下:

  1.对表达式(一般是变量)进行一次性计算;

  2.用变量的值与switch结构中 case 的值进行比较;

  3.如果变量值与case的值相等,则执行与该 case 关联的代码;

  4.代码执行完后,break 语句阻止代码跳入下一个 case 中继续执行;

  5.如果没有 与之匹配的case条件,则执行 default中的代码;

  实例代码:

<?php 
    //星期
    $week=2;
    
    //对星期进行匹配,输出对应的语句。
    switch ($week){
        case 1:
            echo "今天是周一,上班......";
            break;
        case 2:
            echo "今天是周二,上班......";
            break;
        case 3:
            echo "今天是周三,上班......";
            break;
        case 4:
            echo "今天是周四,上班......";
            break;
        case 5:
            echo "今天是周五,上班......";
            break;
        default:
            echo "哈哈,今天是周末!!";
    }
    
    //今天是周二,上班......
?>
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
兴斐雷傲菡
2020-04-15 · TA获得超过3528个赞
知道大有可为答主
回答量:3151
采纳率:33%
帮助的人:227万
展开全部
  PHP
中switch
的功能是:选择执行某个代码块;其工作原理如下:
  1.对表达式(一般是变量)进行一次性计算;
  2.用变量的值与switch结构中
case
的值进行比较;
  3.如果变量值与case的值相等,则执行与该
case
关联的代码;
  4.代码执行完后,break
语句阻止代码跳入下一个
case
中继续执行;
  5.如果没有
与之匹配的case条件,则执行
default中的代码;
  实例代码:
<?php
//星期
$week=2;

//对星期进行匹配,输出对应的语句。
switch ($week){
case 1:
echo "今天是周一,上班......";
break;
case 2:
echo "今天是周二,上班......";
break;
case 3:
echo "今天是周三,上班......";
break;
case 4:
echo "今天是周四,上班......";
break;
case 5:
echo "今天是周五,上班......";
break;
default:
echo "哈哈,今天是周末!!";
}

//今天是周二,上班......
?>
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a2296245
2009-12-13 · 超过15用户采纳过TA的回答
知道答主
回答量:56
采纳率:0%
帮助的人:37.6万
展开全部
你所输出地是字符串,你直接把
case 0:
echo "a 为 0";
break;
这句给删掉,因为你所定义的是字符串,不能用数字的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天街夜雨
2009-12-13 · TA获得超过641个赞
知道小有建树答主
回答量:759
采纳率:0%
帮助的人:663万
展开全部
case 0:
给 0 加上引号
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式