2012-07-10 42 views
3

一個簡單的問題,可以消除相當多的if/else陳述的需要。PHP是否會停止尋找一個'或'(||)符合?

如果,例如,我有這樣一個查詢:

if ($success1=$db->query('SELECT * FROM `foo`;') || $success2=$db->query('SELECT * FROM `bar`;')) { 
    ... 
} 

難道停車檢查時,第一個查詢是成功還是失敗?

+0

當您使用2個已知值進行嘗試時發生了什麼? – Nanne 2012-07-10 12:18:35

+0

是的,它會停止,如果第一個查詢返回的東西,可以評估爲'真' – Florent 2012-07-10 12:18:42

+0

你意識到,每個查詢的成功意味着運行沒有錯誤,而不是實際上是否返回數據....但執行數據庫查詢這不是好的做法 – 2012-07-10 12:19:19

回答

6

如果第一個是真實的,那麼它不會需要檢查什麼都在聲明中,因此將繼續。如果沒有,這樣的代碼:

if(isset($var) && $var == 1)

永遠不會成功,因爲它會拋出一個沒有定義的錯誤。只要它看到第一個是錯誤的,它會停止聲明的其餘部分。

8

你指的是短路。是的,PHP使用短路。使用AND(& &)如果條件中的第一個檢查失敗,它從不檢查第二個檢查。 OR(||)也是如此。如果第一次檢查成功,它從不查看第二條語句。

請參閱以下後進行驗證: PHP short circuit lazy evaluation, where is it in the php.net manual?

時,這是非常有用的一個例子是被零除時。在第一次檢查中,您確定分母是否爲零,然後在第二次檢查時確定分隔。順序很重要。如果分母是零,它將跳過第二次檢查,並且永遠不會被零除。

if($x != 0 && 10/$x > 3)

相關問題