php version: 7.0.26
不要问我这个问题有什么意义,谢谢,我只是单纯的想弄清楚 php 的优先级和结合性问题!!!
首先来看一个例子:
>>> $i = 1;
=> 1
>>> $i + $i++;
=> 3
这个很好理解,++优先级高于+, $i++这个表达式的值为 1,虽然是后置递增但$i++在跟$i 相加之前$i 已经完成了自增,所以是 2+1=3。
再看一个例子:
>>> $i = 1;
=> 1
>>> $i + ++$i + $i++;
=> 6
那谁能告诉我这个例子为什么等于 6 ?
按照我的算法:
1.应该先算最右边的$i++, 因为++优先级高于+, 然后++的结合性是从右到左,那么$i++这个表达式的值为 1,然后$i 递增为 2
2.然后算++$i, $i 自增为 3,++$i 表达式的值也为 3
3.然后就是 3 + 3 + 1 = 7
想不通为什么等于 6,求大神解答。
还有个问题:
>>> function foo(){ return 0; }
>>> if (!$a = foo()) { echo 1; }
1⏎
为什么这个例子不会报错?!的优先级不是比=号高么,为什么不是先算!$a???
虽然官方文档说这种操作是允许的,但是这到底算什么啊,feature?
不要问我这个问题有什么意义,谢谢,我只是单纯的想弄清楚 php 的优先级和结合性问题!!!
首先来看一个例子:
>>> $i = 1;
=> 1
>>> $i + $i++;
=> 3
这个很好理解,++优先级高于+, $i++这个表达式的值为 1,虽然是后置递增但$i++在跟$i 相加之前$i 已经完成了自增,所以是 2+1=3。
再看一个例子:
>>> $i = 1;
=> 1
>>> $i + ++$i + $i++;
=> 6
那谁能告诉我这个例子为什么等于 6 ?
按照我的算法:
1.应该先算最右边的$i++, 因为++优先级高于+, 然后++的结合性是从右到左,那么$i++这个表达式的值为 1,然后$i 递增为 2
2.然后算++$i, $i 自增为 3,++$i 表达式的值也为 3
3.然后就是 3 + 3 + 1 = 7
想不通为什么等于 6,求大神解答。
还有个问题:
>>> function foo(){ return 0; }
>>> if (!$a = foo()) { echo 1; }
1⏎
为什么这个例子不会报错?!的优先级不是比=号高么,为什么不是先算!$a???
虽然官方文档说这种操作是允许的,但是这到底算什么啊,feature?