PHP中的邏輯運算子與賦值運算子優先權.
<p>最近我在一則這樣的段落中發現了它:</p>
<pre class="brush:php;toolbar:false;">$x = 2 && $y = 3; echo (int)$x.':'.(int)$y;</ pre>
<p>該程式碼片段生產輸出 1:3。透過查看運算子優先級表,我發現邏輯運算子||和&&具有比賦值運算子=更高的優先權。因此,第一個表達式應該被視為$x = ($y || 2) = 3;這使得$x = (2 && $y) = 3;,最後評估為$x = false = 3;。其次,賦值運算子具有右置序性,所以解釋器應該嘗試執行false = 3,這是顯然非法的。所以,在我看來,上述提到的程式碼片段應該無法編譯,並且應該拋出解析或執行時錯誤。但是,相反,但程式碼片段生產了1:3。這意味著解釋器執行的操作是:</p>
<blockquote>
<p>a) $y=3</p>
<p>b) 2 && $y</p>
<p>c) $x = (2 && $y)</p>
</blockquote>
<p>為什麼要這樣做而不是根據運算符優先級?</p>