<?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).
論理演算子の場合、各論理演算子の両側の式が 1 つの全体に結合されます
したがって、組み合わせ 1$b !== $c && $d = $b =。 = $c
、この式では 2 つの組み合わせが生成されます:($b !== $c) && ($d = $b == $c)
$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
.这里解释了可以执行右边的赋值表达式,而不执行左边的赋值表达式,因为左边的赋值表达式优先级低,在执行它之前,需要执行完
!==
, 再执行&&
,之后接着执行==
,再执行右边的=
,再执行左边的=
組み合わせ 1 :($b !== $c)
組み合わせ 2:($d = $b == $c)
( 最初の $ b !== $c)
、短絡操作の組み合わせ 2($d = $b == $c) に従って、結果は
true
になります。この組み合わせでは、 code> を実行する必要があります。==
演算子の優先順位が高いため、==
は代入前に実行されます。これはfalse最終的に、組み合わせ 1 の結果は
true
となり、組み合わせ 2 の結果はfalse
となるため、$a=false
となります。 🎜🎜ここでは、左側の代入式は優先度が低いため、左側の代入式を実行する代わりに、右側の代入式を実行できることを説明します。 code> を実行し、次に&& code> を実行し、次に
==
を実行し、次に右側の=
を実行し、次にを実行する必要があります。 =
左側🎜.🎜私はあなたが書いたこの行を注意深く見ていないので、ここに文句を言いに来ました
$a = $b !== $c && $d = $b == $c;
、私はそれをコピーして貼り付けました、はは、666..兄貴:
1. そのようなコードは書籍にあります。
2. このようなコードプロジェクトはほとんど存在しません。モデルが強くなる
4. このような要件は単純に理解できますが、使いやすさは強くありません。