PHP 演算子の優先順位を理解するにはどうすればよいですか?
伊谢尔伦
伊谢尔伦 2017-05-16 13:04:40
0
2
545
<?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 です)。

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学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
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート