if(something)vs if(something === true)

时间:2010-06-20 17:55:57

标签: cakephp cakephp-1.2

我正在做一些关于cakephp的自学(版本1.26) 我有一个简单的HTML输入文本字段,如下所示:

<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;}
    }

有人可以帮忙吗?

7 个答案:

答案 0 :(得分:7)

您使用 严格 类型与===而不是==进行比较,这意味着$result实际上不等于true使条件失败。试着看看$result变量中出现了什么:

var_dump($result);

或者使用(==)尝试此条件:

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

或者简单地说:

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

答案 1 :(得分:3)

假设findByName返回某种对象或数组。如果你使用if ($result),这个对象/数组将被强制转换为布尔值。

但是,如果您使用if ($result === true),则严格将对象/数组与布尔值true进行比较,此比较将始终评估为false。

答案 2 :(得分:2)

PHP参考有关如何进行类型比较的非常好的解释。快速的答案是,你现在正在做一个更严格的比较,并且一些边缘情况正在崩溃。你可能会对$ result == true

没问题

http://php.net/manual/en/language.operators.comparison.php

答案 3 :(得分:1)

这是因为$result === true检查$result值是true。 但是您的$result变量包含数据库的结果。

答案 4 :(得分: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,那么前一个控制结构将处理该块,但后者不会。

答案 5 :(得分:1)

===意味着相同和相同的类型...... 但是$ result包含来自db的数据。所以它不是布尔... 使用==代替:

if($result==true)

答案 6 :(得分:1)

在您的代码中,当有结果时,返回值为非零,因此它将评估为true

===是身份运算符,当两个对象相同时将返回true

e.g。 1===1 (true) true===true (true) true===1 false

==是等于运算符,当两个对象相等等效时,将返回true

e.g。 1==1 (true) true==true (true) true==1 true

findByName 将返回一个数组或unsetunset将等同于false,数组将等同于true

true本身永远不会在您的代码中返回,因此===永远不会是true