Cakephp if(某物)vs if(某物===真)

Cakephp if(某物)vs if(某物===真),cakephp,cakephp-1.2,Cakephp,Cakephp 1.2,我在自学cakephp(1.26版)。 我得到了一个简单的HTML输入文本字段,如下所示: <input type="text" name="data[testing][name]" id="data[testing][name]"> 当我对上面的代码稍作修改时,遇到了一个问题, 但后来它失败了: { $t=$this->data; $result=$this->User->findByname($t['testing']['name']

我在自学cakephp(1.26版)。
我得到了一个简单的HTML输入文本字段,如下所示:

<input type="text" name="data[testing][name]" id="data[testing][name]">
当我对上面的代码稍作修改时,遇到了一个问题,
但后来它失败了:

 {
      $t=$this->data;
      $result=$this->User->findByname($t['testing']['name']); 
      if($result===true){ //doing something;}
    }
有人能帮忙吗?

您使用的是严格的类型比较
==
,而不是
=
,这意味着
$result
实际上不等于
true
,因为条件失败了。尝试查看
$result
变量中的结果:

var_dump($result);
或者使用(
=
)尝试此条件:

或者简单地说:

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

这是因为
$result===true
检查
$result
值是否为
true

但是您的
$result
变量包含来自数据库的结果。

这里假设findByName返回某种对象或数组。如果使用
if($result)
此对象/数组将转换为布尔值


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

PHP参考文件对如何进行类型比较给出了非常好的解释。快速的答案是,您现在正在进行更严格的比较,一些边缘案例正在从裂缝中消失。如果$result==true,您可能不会有问题


粗略地说,
if
运算符将参数转换为布尔值并对其求值。因此,
if($result)
$result
转换为
true
false
。另一方面,
===
实际上检查类型和“值”是否相等,因此
true===$val
仅在
$val
为布尔值
true
时返回
true
=
显然返回一个布尔值,因此在
if
中后续求值不需要强制转换。这对您意味着,
if($result)
处理块if
$result
转换为
true
。成为
true
的示例有
1
'1'
新对象()
。相反,
如果($result==true)
不会立即强制转换
$result
。它根据布尔值
true
检查它的类型和“值”


如果
$result
为,例如
1
,则前一个控制结构将处理该块,但后一个控制结构不会处理该块。

===表示相等且与您相等的块类型相同。。。 但是$result包含来自db的数据..所以它不是布尔值。。。 使用==代替:

if($result==true)

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

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

e、 g.
1===1(真)真===真(真)真===1
false

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

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

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


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

顺便说一句,这个问题与CakePHP基本无关
=
if
都是本机PHP运算符。
if ($this->User->findByname($t['testing']['name'])){ //doing something;}
if($result==true)