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

有人可以帮忙吗?

4

7 回答 7

7

您正在使用与而不是的严格类型比较,这意味着通过使条件失败实际上不等于那里。尝试查看变量中的内容:=====$resulttrue$result

var_dump($result);

或者用 ( ) 试试这个条件==

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

或者简单地说:

if ($this->User->findByname($t['testing']['name'])){ //doing something;}
于 2010-06-20T17:58:09.793 回答
3

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

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

于 2010-06-20T18:01:28.373 回答
2

PHP 参考对如何进行类型比较有很好的解释。快速的回答是,您现在正在进行更严格的比较,并且一些边缘情况正在从裂缝中消失。你可能会很好 $result == true

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

于 2010-06-20T18:02:16.833 回答
1

那是因为$result === true检查,如果$result值是true. 但是您的$result变量包含来自数据库的结果。

于 2010-06-20T17:59:15.640 回答
1

粗略地说,if运算符您的参数转换为布尔值并对其进行评估。所以if($result)转换$resulttrueor false。另一方面,===实际上检查类型和“值”是否相等,所以true === $val只会返回boolean 。显然返回一个布尔值,因此 . 内的后续评估不需要强制转换。这对您意味着什么,如果转换为. 变成的事物的例子是、和。相反,不会立即施放. 它检查它的类型和“值”对 boolean 。true$valtrue===ifif($result)$resulttruetrue1'1'new Object()if($result===true)$resulttrue

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

于 2010-06-20T18:03:46.987 回答
1

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

if($result==true)
于 2010-06-20T18:04:33.603 回答
1

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

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

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

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

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

findByName将返回一个数组或unset. unset将等同于false并且数组将等同于true

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

于 2010-06-21T09:36:48.883 回答