首頁  >  問答  >  主體

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>
P粉176980522P粉176980522462 天前532

全部回覆(1)我來回復

  • P粉615829742

    P粉6158297422023-08-08 00:02:37

    您提供的運算子優先級表格中作為一個單獨的註釋指出:

    因此,實際上,在表達式中的賦值將被視為一個子表達式。具體的處理方式和時間並沒有在文件中明確說明,文件只是指出「類似」的表達式會以這種方式運作。

    #

    回覆
    0
  • 取消回覆