【踩坑】PHP中关于运算符优先级使用中可能遇到的问题

先上一段代码

$a=10;
$b=20;
if ($a = 1 && $b = 2) 
{
	echo '分支1';
}
else
{
	echo '分支2';
}

var_dump($a);
var_dump($b);

预测一下,这段代码的输出内容?

不知道你有没有猜对,这段代码的实际输出结果是

分支1bool(true) int(2)

前段时间偶然的一次错误发现了这个奇怪的问题,想了半天没想明白,一开始以为是if的问题,后来查了半天,最终确定是运算符优先级的问题。

因为&&运算符优先级高于=,所以if里的代码实际执行效果是

$a = (1 && ($b = 2))

所以最终$a被赋值成true,$b被赋值成2。(但是这里还有一个疑问,这里优先级最高的&&却让位给了低于其优先级的$b=2,关于这个问题恰巧在鸟哥的博客看到了类似的问题及其讨论,受益匪浅 点击打开链接

最终是因为自己基本功不够扎实啊,赶紧恶补了一下相关知识。

关于运算符优先级的官方手册说明:http://php.net/manual/zh/language.operators.precedence.php

其实官方手册下边的评论也值得一看,有一些朋友也给出了一些需要注意的关于运算符优先级的可能遇到的问题。

例如

$bool = true && false;
var_dump($bool); // false, that's expected

$bool = true and false;
var_dump($bool); // true, ouch!

因为&&运算符优先级高于=,但是and运算符低于=,所以在使用不当的时候可能会产生与预期不符的执行效果,平时写代码时需要额外留意。


最后留下一个思考题,看看下边的代码会输出什么内容?

$a=10;
$b=20;
$c=30;
if ($a = 1 && $b = 2 && $c = 3) 
{
	echo '分支1';
}
else
{
	echo '分支2';
}

var_dump($a);
var_dump($b);
var_dump($c);


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值