php运算符优先级如何理解?
伊谢尔伦
伊谢尔伦 2017-05-16 13:04:40
0
2
529
<?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伐。

全員に返信(2)
伊谢尔伦

論理演算子の場合、各論理演算子の両側の式が 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)

したがって、組み合わせ 1( 最初の $ b !== $c)、短絡操作の組み合わせ 2 ($d = $b == $c) に従って、結果は true になります。この組み合わせでは、 code> を実行する必要があります。 == 演算子の優先順位が高いため、 == は代入前に実行されます。これは false最終的に、組み合わせ 1 の結果は true となり、組み合わせ 2 の結果は false となるため、$a=false となります。 🎜🎜ここでは、左側の代入式は優先度が低いため、左側の代入式を実行する代わりに、右側の代入式を実行できることを説明します。 code> を実行し、次に && code> を実行し、次に == を実行し、次に右側の = を実行し、次に を実行する必要があります。 = 左側🎜.🎜
いいねを押す +0
淡淡烟草味

私はあなたが書いたこの行を注意深く見ていないので、ここに文句を言いに来ました$a = $b !== $c && $d = $b == $c;、私はそれをコピーして貼り付けました、はは、666..

兄貴:
1. そのようなコードは書籍にあります。
2. このようなコードプロジェクトはほとんど存在しません。モデルが強くなる
4. このような要件は単純に理解できますが、使いやすさは強くありません。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!