PHP における論理演算子と代入演算子の優先順位。
P粉176980522
2023-08-07 11:55:52
<p>最近、次のような一節でそれを見つけました。</p>
<pre class="brush:php;toolbar:false;">$x = 2 && $y = 3; echo (int)$x.':'.(int)$y;</前>
<p>このコード スニペットは出力 1:3 を生成します。演算子の優先順位表を見ると、論理演算子 || と && が代入演算子 = よりも優先順位が高いことがわかりました。したがって、最初の式は $x = ($y || 2) = 3; として扱われ、$x = (2 && $y) = 3; となり、最終的に $x = false = 3; と評価されます。 。次に、代入演算子には右順序があるため、インタプリタは false = 3 を試行する必要がありますが、これは明らかに不正です。したがって、私の意見では、上記のコード スニペットはコンパイルに失敗し、解析エラーまたは実行時エラーがスローされるはずです。しかし、代わりに、このスニペットは 1:3 を生成しました。これは、インタプリタが行うことは次のとおりであることを意味します。 </p>
<ブロック引用>
<p>a) $y=3</p>
<p>b) 2 && $y</p>
<p>c) $x = (2 && $y)</p>
</blockquote>
<p>なぜ演算子の優先順位に基づくのではなくこれを行うのですか?</p>
あなたが提供した演算子の優先順位表には、別のコメントとして次のように記載されています。
したがって、実際には、式内の代入は部分式として扱われます。これがいつどのように行われるかはドキュメントに明確に記載されておらず、単に「同様の」式がこのように機能することが記載されています。