PHP 中的非逻辑逻辑

Unlogical Logic in PHP

考虑一个 return 为整数或假的函数:

我可以用以下方法检查错误:

if(false == my_function()) {
    echo "do something";
}

但是如果我想否定逻辑:

if(true == my_function()) {
    echo "do something";
}

第二个示例在所有情况下都评估为 true - 即使 returned 为 false。那怎么可能呢。我如何检查是否为假 return.

true 不可能等于 "falsy"(参见 PHP boolean documentation)。无论如何,您应该始终使用 (not) identical (!==/===) 而不是 (not) equal (!=/== ) 运算符并仅比较 php 中的相同数据类型以避免一些奇怪的隐式类型转换。

例如

// DO
if ($number > 0) {...}
if ($number !== 0) {...}
// DON'T
if ($number) {...}
if ($number == true) {...}
if ($number != 0) {...}

// DO
if (count($array) > 0) {...}
if (!empty($array)) {...}
// DON'T
if ($array) {...}
if (count($array)) {...}

// DO
if (strlen($string) > 0) {...}
if (!empty($string)) {...}
// DON'T
if ($string) {...}

// and so on ...

真不假。

<?php
function return_false()
{
    return false;
}

var_dump(true == return_false());

输出:

bool(false)

进一步:

function return_one()
{
    return 1;
}

function return_zero()
{
    return 0;
}

var_dump(true == return_one());
var_dump(true == return_zero());

输出:

bool(true)
bool(false)

正整数为真。 0 是假的。