PHP中的邏輯運算子與賦值運算子優先權.
P粉176980522
P粉176980522 2023-08-07 11:55:52
0
1
451

最近我在一則這樣的段落中發現了它:

$x = 2 && $y = 3; echo (int)$x.':'.(int)$y; 

該程式碼片段生產輸出 1:3。透過查看運算子優先級表,我發現邏輯運算子||和&&具有比賦值運算子=更高的優先權。因此,第一個表達式應該被視為$x = ($y || 2) = 3;這使得$x = (2 && $y) = 3;,最後評估為$x = false = 3;。其次,賦值運算子具有右置序性,所以解釋器應該嘗試執行false = 3,這是顯然非法的。所以,在我看來,上述提到的程式碼片段應該無法編譯,並且應該拋出解析或執行時錯誤。但是,相反,但程式碼片段生產了1:3。這意味著解釋器執行的操作是:

a) $y=3

b) 2 && $y

c) $x = (2 && $y)

為什麼要這樣做而不是根據運算符優先級?

P粉176980522
P粉176980522

全部回覆 (1)
P粉615829742

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

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

#
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板
    關於我們 免責聲明 Sitemap
    PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!