2010-06-20 78 views
2

我在做關於cakephp(版本1.26)的一些自學。
我有一個簡單的HTML輸入文本字段是這樣的:if(something)vs if(something === true)

<input type="text" name="data[testing][name]" id="data[testing][name]"> 

從輸入文本框字段中的值是對數據庫進行檢查。
如果該值與存儲在數據庫中的數據匹配,則它將返回true。
下面是代碼:

{ 
    $t=$this->data; 
    $result=$this->User->findByname($t['testing']['name']); 
    if($result){ //doing something;} 
} 

我遇到了一個問題,當我改變了上面一個小變化的代碼,
但隨後沒再工作:

{ 
     $t=$this->data; 
     $result=$this->User->findByname($t['testing']['name']); 
     if($result===true){ //doing something;} 
    } 

任何人都可以幫助請?

回答

3

這裏假設findByName返回某種對象或數組。如果你使用if ($result)這個對象/數組將被轉換爲布爾值。

如果您使用if ($result === true)但嚴格將對象/數組與布爾值true進行比較,則此比較始終評估爲false。

7

您使用的是帶有===而不是==嚴格類型的比較,這意味着$result實際上不是通過使病情不能等於true那裏。嘗試看看不來,雖然在$result變量:

var_dump($result); 

或嘗試用這種條件(==):

if($result == true){ //doing something;} 

或者乾脆:

if ($this->User->findByname($t['testing']['name'])){ //doing something;} 
1

這是因爲$result === true檢查,如果$result的值是true。 但是你的$result變量包含來自數據庫的結果。

1

粗磨時,if操作casts你的論點爲一個布爾並評估它。因此if($result)$result轉換爲truefalse。另一方面,===實際上檢查類型和「價值」相等,所以true === $val將只返回true如果$val是布爾true===顯然會返回一個布爾值,因此在if之內的後續評估中不需要投射。這對你意味着什麼,if($result)處理該塊,如果$result投入true。成爲true的東西的例子是1,'1'new Object()。相反,if($result===true)不會立即投射$result。它根據布爾型true檢查它的類型和「值」。

如果$result1,則前一個控制結構將處理該塊,但後者不會。

+0

順便說一下,這個問題基本上與CakePHP無關。 '==='和'if'都是原生PHP運算符。 – 2010-06-20 18:04:34

1

===意味着平等的,相同類型的,你等於給... 什麼,但$結果包含db..so它不是布爾...... 使用的數據,而不是==:

if($result==true) 
1

在你的代碼中,當有結果時,返回值不爲零,因此它將計算爲true

===是恆等算子,並且將返回true當兩個對象相同

例如1===1 (true) true===true (true) true===1

==是等於運算符並且將返回true當兩個對象等於等效

例如1==1 (true) true==true (true) true==1

findByName將返回一個陣列或unsetunset將等同於false,陣列將等同於true

true本身永遠不會返回您的代碼中,所以===永遠不會是true

相關問題