PHP - 检查返回false;

时间:2011-06-03 19:20:32

标签: php

只是一个简单的问题 - 而且我确信它非常基本!

我有以下代码:

function checkThings($foo, $bar) {
    ...
    if ($valid) {
        return $results;
    } else {
        return false;
    }
}

另一方面,我正在做

$check = checkThings($foo, $bar);
if ($check === false) {
    echo "Error";
} else {
    echo $check;
}

写下面的内容是否相同?

$check = checkThings($foo, $bar);
if (!$check) {
    echo "Error";
} else {
    echo $check;
}

如果两种方法都正确,哪种方法是首选方法?

谢谢:)

8 个答案:

答案 0 :(得分:50)

三等运算符是类型敏感的。所以当你检查:

if ($check === false)

...只有$check是布尔值“false”才会成立。 Wheras

if ($check == false)

...不是专门检查布尔值false,而是“falsey”值。 PHP中的False等于零,null为“falsey”,空字符串为"" == false == null,但"" !== false !== null)。所以:

$check = 0;
if ($check == false)

...评估为真。

!前缀运算符相当于==。因此,当零必须是布尔值为false的离散值时,!==运算符是不够的。

在此处查看比较运算符的文档:http://php.net/manual/en/language.operators.comparison.php

最佳做法是使您的条件检查尽可能具体。这不仅是为了避免您的逻辑中的潜在疏忽,而且还为未来的开发人员提供更易于维护的代码。想象一下遇到一行代码:

if (check_something($variable)) {
  // do stuff
}

我可以假设check_something函数返回一个布尔值为true。但是,除非我去挖掘check_something函数,否则它 也会返回一个非空字符串,一个数字......谁知道!这样做要清楚得多:

if (check_something($variable) === true) {
  // do stuff
}

现在,只需查看,我就知道check_something函数 预期 可返回真值。我可能不知道这个函数是做什么的,但至少它确切地说明了它返回的内容。另一个常见的例子是你所看到的:

if (!$_GET['value']) {
  // do something
}

这是一个宠儿。条件陈述应始终清楚地比较事物。所以,你想要这样做:

if (array_key_exists('value', $_GET) !== false && $_GET['value'] === '1') {
  // do something
}

现在,您可以告诉我,我不仅要检查查询字符串参数是否存在,还要查看它是否等于特定值。

总之,单!前缀运算符和==运算符很少有用且总是不明确的。最好的方法是以一种文档本身的方式编写代码,或者将其翻译成人类语言来表达逻辑。在适当的情况下,使用!=====进行直接比较是一种好习惯,良好做法,并且最不可能在代码中产生意外结果。

答案 1 :(得分:7)

=== false检查类型,(!$ check)计算值,并且对于返回的值失败,例如null,''(空字符串)和零(0)

===是最正确的

答案 2 :(得分:4)

它们相似但不完全相同。 !$check是一个松散的检查器,意味着0null也会评估为真。 ===是一个严格的检查程序,这意味着它必须是false

更深入的解释:PHP Types Comparisons

答案 3 :(得分:0)

==进行值比较,其中===按位进行。

// will return true only when $value = false
if( $value === false )

// will return true when $value = 0, $value = "", $value = null, etc
if( $value == false )
if( !$value )

答案 4 :(得分:0)

我更喜欢你的第二种方法,但先把正面检查(if($ check)代替)。

答案 5 :(得分:0)

在某些情况下,使用单个!前缀运算符不会带来任何风险,而是要评估的表达式类型始终为布尔值。

例如,下面的表达式

if (!is_array($var)) {

将始终与

相似
if (is_array($var) === false) {

这是因为函数is_array始终返回布尔值作为结果。

is_array ( mixed $var ) : bool

某些人可能会发现使用单个!前缀运算符更容易阅读第一个表达式。唯一需要记住的是,当将表达式与返回的类型混合使用时,由于其他注释已经指出,所以我们可能会得到意想不到的结果。

答案 6 :(得分:0)

如果您要检查多个条件,可以执行以下操作:

function checkThings($foo, $bar)
{
    else if ($valid === false)
    {
        return false;
    }
    else if ($valid === 1)
    {
        return 1;
    }
    else if ($valid === 2)
    {
        return 2;
    }
    else if ($valid === 3)
    {
        return 3;
    }
}

但是,当您尝试检查返回哪个值以及运行了哪段代码时,必须使用“ ===”严格检查函数的返回。

答案 7 :(得分:0)

在我从JS Datatable获得值的情况下,我将其检查为:

if($value=='true'){ // or for 'false' }
相关问题