为了账号安全,请及时绑定邮箱和手机立即绑定

PHP里 switch case条件语句的问题

PHP里 switch case条件语句的问题

PHP
呼如林 2019-03-14 10:10:53
<?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有什么玄机呢?
查看完整描述

3 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

这个问题应该从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



查看完整回答
反对 回复 2019-03-20
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

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

查看完整回答
反对 回复 2019-03-20
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

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

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

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

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

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

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

  实例代码:

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

<?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 "哈哈,今天是周末!!";

    }

     

    //今天是周二,上班......

?>


 


查看完整回答
反对 回复 2019-03-20
  • 3 回答
  • 0 关注
  • 823 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信