一个面试题,关于运算优先级和递增递减

<?php 
$a = 3;
$b = 5;
if ($a = 5 || $b = 7) {//这里意外赋值 
var_dump($a);//boolean true 
var_dump($b);//int 5 
$a++; 
$b++; 
var_dump($a);//boolean true 
var_dump($b);//int 6
}
echo $a.'----'.$b;
?>

这是那个面试题,我给加上了4个var_dump函数。

这个题目的最后输出结果: 1 ---- 6为什么会是这样呢?

我们先看 if ($a = 5 || $b = 7) { 这里 ,这里 $a 被意外赋值 (大家平时不要这么写,容易出现问题的)那这个if () 里面的 $b 是不是意外赋值呢?

答案是, $b 没有意外赋值,因为 括号里面 || 后面的$b=7 没被执行。

因为,if($a =5 ) 这里 $a = 5 的时候,$a 已经变成 true了, || 或运算后面的就不会被执行。 

符合if条件,直接执行if 里面的内容。

我们可以看到 第一个 var_dump($a) 输出 boolean true ;var_dump($b) 输出int 5又一个问题,$a++ 之后,为什么不是2呢? 

true 为什么不转换为整数 1 呢?

手册上不是写着:

        要明示地将一个值转换为 integer,用 (int) 或 (integer) 强制转换。不过大多数情况下都不需要强制转换,因为当运算符,函数或流程控制需要一个 integer 参数时,值会自动转换。还可以通过函数 intval() 来将一个值转换成整型。 

再看下手册中关于 自增/自减 的内容:

        递增/递减运算符不影响布尔值。递减 NULL 值也没有效果,但是递增 NULL 的结果是 1。

 纳尼!? 这下终于知道了。 

$a = true; 

$a ++; 

echo $a; 

最后还是 输出1    这时候才自动转换为 整数 1 输出。

-------------------------华丽的分割线--------------------------------------

手册很重要啊! 尤其是那些 注意内容。

转载于:https://www.cnblogs.com/snake-hand/archive/2012/08/13/2636233.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值