2010-11-18 83 views
20

我有一個條件語句這樣的:PHP懶布爾評估

if($boolean && expensiveOperation()){ ...} 

確實PHP有懶布爾評估,即會檢查它$boolean,如果是假的也懶得進行昂貴的操作?如果是這樣,我應該把我的變量放在什麼順序?

+0

我一般會從把2個操作在同一行的代碼,如果他們不是固有地與剋制。它使得可讀性變得困難,並且你不會獲得計算時間或資源。 – 2010-11-18 16:02:30

+1

Apols for my incorrect answer(now deleted)。我以爲我記得試過這個,發現它不起作用,但我顯然錯了。 – 2010-11-18 16:05:24

+0

@Nathan至少你得到了同伴壓力徽章:) – 2010-11-18 16:07:30

回答

23

是的。這就是所謂的短路評估。請參閱關於documentation page的評論...

至於訂單,它會根據Operator Precedence執行檢查,然後從左到右。所以:

A || B || C 

將評估第一個,然後只有B,如果A是假的,和C僅當A和B都是假的......

A AND B || C 

總是會評估B || C,因爲||具有比AND更高的優先級(對於&&不是這樣)。

+0

如果你想*非shor電路評估你可以使用一個單一的&將是一個布爾聯合功能。它會計算兩個值,然後嘗試在它們之間執行AND。 – Mikhail 2010-11-18 15:59:25

+8

@Mikhail:是的。但是你必須小心,因爲單詞'&'實際上是一個按位運算符。所以'true&2'將是錯誤的(因爲'true'是'00000001','2'是'00000010',所以'AND'將是'00000000')... – ircmaxell 2010-11-18 16:01:11

+0

@Alin:謝謝!大壩谷歌帶我到錯誤的文檔...修復答案。謝謝! – ircmaxell 2010-11-18 16:04:47