2014-05-11 69 views
0

這裏對我來說很奇怪。Php邏輯表達式和對象

代碼1:

if($city = Cities::find_by_id($city_id)) { 
    var_dump($city); 
} 

這返回:對象(城市)#6(7){...},普通

代碼2:

if($city = Cities::find_by_id($city_id) && $building = Buildings::find_by_id($building_id)) { 
     var_dump($city); 
} 

這將返回:布爾(真),我期待的結果像之前那樣

有人可以向我解釋發生了什麼?

+0

'$ var = Object'指定Object到'$ var',但是'$ var = Object && Object'指定了Object && Object'的布爾值評估 –

回答

1

這裏發生的事情是,在第一種情況下,你只是分配函數的返回值變量$城市

$city = Cities::find_by_id($city_id) 

和結果是相當多的,你會期待什麼。因爲你正在做的事情不同的第二種情況 - 你正在分配

Cities::find_by_id($city_id) && $building = Buildings::find_by_id($building_id) 

變量$城市,這意味着如果城市:: find_by_id和建築:: find_by_id都返回stdObjects有邏輯和應用運營商。

它是這樣的:

$city = (object) && (object) 

這是幾乎相同

$city = true && true 

你可能會想要做這樣的事情(見額外的括號):

if(($city = Cities::find_by_id($city_id)) && ($building = Buildings::find_by_id($building_id))) { 
    var_dump($city); 
} 
+0

+1比我自己的解說更好,並提供解決方案 –