<?php
$a = 1;
$b = 2;
$c = 3;
$d = 4;
$a = $b !== $c && $d = $b == $c;
var_dump($a,$d);終了;
ここで私が理解していることは次のとおりです。まず、!== は && よりも優先度が高いため、最初に $b !== $c (真である) か $b == $c* (偽である) かどうかが判断されます。で&&判定を行い、&&では左側を先に実行し、その結果をもとに右側を実行すると、左側が$a = true、右側が$d = falseとなりますが、なぜ $a を印刷すると false になるのでしょうか? では、これが実際には次のとおりであることがわかります。
$a = (true && ($d = false));
これが理解できません。&& が左側の式ではなく、左側の $b !== $c の値を参照しているのに、なぜ右側で $d = false を実行できるのでしょうか?この組み合わせは何ですか?どうやって組み合わせるのですか...
多くの情報を確認し、何人かの同僚に尋ねましたが、説明が難しく、日常の開発では使用できないと言われました。強迫性障害について、本当に知りたいのですが、誰か助けてくれませんか? PHP の演算子の優先順位と実行の問題を理解し、判断する方法についてアドバイスをください。実際、オープンソースにはそのような記述方法がまだたくさんあります。
実際、これは $a = $b && $b = $ c; に似ています。
最終的に $a は true ですが、$b は $c の値です (次のように仮定します)。 3 つの変数 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. このような要件は単純に理解できますが、使いやすさは強くありません。