php的==问题

    今天,一个同学给出了这样一段代码,他说不好理解。
    <?php
       var_dump("1" == "01");

       var_dump(0   == "a");

       switch("a"){

           case 0: 

                     echo 0;

           case "a":

                    echo "a";

      }

 

    输出结果为什么是 true ,true,0

 

    我看了看,说把整个比较的过程调换下位置,变成下面这种形式。
    <?php
       var_dump("01" == "1");

       var_dump("a"  ==  0);

       switch("a"){

            case "a":

                    echo "a";

            case 0: 

                     echo 0;

      }

 

   结果是true, false,a

   对于
   var_dump(0   == "a");  输出 true

   var_dump("a"  ==  0);  输出 false

  
   我的理解是,由于php是弱变量类型,那么在进行值相等匹配时,会根据第一个扫描到的数进行类型匹配,

   将两个数的类型都转为之前扫描到的数的类型后进行比较。

    ※  "a"转化为整形之后为 0

 

    对于  var_dump("1" == "01");

    和       var_dump("01" == "1");

     输出结果都为true.我理解为编译器在进行编译时对代码进行的优化,也就是采用了一个机制对其进行了处理。

     对于俩个字符串, 会首先判断他们是否是数字字符串,如果都是数字字符串的话,会先把他们转换为数字类型

     再进行比较。

     如果觉得难以理解,网上搜到了一篇文章,希望有帮助.

     http://www.laruence.com/2009/02/21/662.html

  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值