php运算符优先级如何理解?
伊谢尔伦
伊谢尔伦 2017-05-16 13:04:40
0
2
502
<?php
$a = 1;
$b = 2;
$c = 3;
$d = 4;
$a = $b !== $c && $d = $b == $c;
var_dump($a,$d);exit;

这里我理解的是:首先因为!==优先级高于&&,所以先判断$b !== $c(为true)和$b == $c*(为false),然后进行&&判断,而&&的话,是先执行左边,再根据结果执行右边吧,那么左边是$a = true,然后右边是$d = false,但是为什么打印$a是false呢,然后我理解这里其实是:

$a = (true && ($d = false));

这我就不懂了,如果&&并不是指左边的表达式,而是左边的$b !== $c的值,那么为什么右边就可以运行$d = false呢,到底这个结合是怎么结合的呢...
查了很多资料,也问了几个同事,他们都表示比较难解释,日常开发不会用,但是我作为一个菜鸟,强迫症实在想弄明白,请大神们赐教如何去理解和判断PHP的运算符优先级和执行问题,因为其实开源代码里这种写法还是比较多的.
其实也类似于$a = $b && $b = $c;最后$a为true,而$b却是$c的值.(假设abc三个变量都是上面的1,2,3).

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

Antworte allen(2)
伊谢尔伦

对于逻辑运算符可以这样看,在每一个逻辑运算符的两边的表达式都将被组合成为一个整体.
对于$b !== $c && $d = $b == $c,对于这个表达式,将会生成两个组合:
($b !== $c) && ($d = $b == $c)
组合1: ($b !== $c)
组合2: ($d = $b == $c)
所以先执行组合1($b !== $c),结果是true,根据短路运算,需要执行组合2($d = $b == $c),对于这个组合,里面又由于==运算符优先级高,执行==,在赋值,也就是false. 所以最终组合1的结果是true,组合2的结果是false,所以$a=false.
这里解释了可以执行右边的赋值表达式,而不执行左边的赋值表达式,因为左边的赋值表达式优先级低,在执行它之前,需要执行完!==, 再执行&&,之后接着执行==,再执行右边的=,再执行左边的=.

淡淡烟草味

我来吐槽的. 你写的$a = $b !== $c && $d = $b == $c;这一行我至今没有仔细看,我是复制粘贴的,哈哈,666..

大兄弟:
1.这样的代码是书本里面的;
2.这样的代码项目里面很少存在,几乎为0
3.即使有类似的需求,会用()来控制.以达到可读型更强的目的
4.这样的需求简单理解下就行,使用性不强.

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!