布尔值和字符串条件

时间:2015-05-10 06:10:09

标签: php

我必须将状态更改为方法中的单词,但是当我将参数作为字符串传递给方法时,我会从两个条件中得到结果:

public static function Status($status)
{
    if ($status == true || $status == True  || $status == 'true' || $status == 'True' || $status == 1)
    {
        echo "true";
    }
   if ($status == false || $status == False || $status == 'false' || $status == 'False' || $status == 0)
    {
        echo "false";
    }
}

当我通过'错误' value作为方法的字符串我得到truefalse结果,但我对字符串值没有任何问题。

2 个答案:

答案 0 :(得分:5)

您应该使用===代替==来检查值是否相同。因为如果在不检查变量类型的情况下进行比较,任何字符串都将被视为true。所以,将代码更改为

function Status($status)
{
    if ($status === true || $status === True  || $status === 'true' || $status === 'True' || $status === 1)
    {
        echo "true";
    }
    if ($status === false || $status === False || $status === 'false' || $status === 'False' || $status === 0)
    {
        echo "false";
    }
}

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

答案 1 :(得分:1)

一个可能派上用场的简单技巧:

if (is_string($status)) $status = json_decode($status);
if ($status) {
   echo "true";
}
else {
   echo "false";
} 

json_decode将转换为“False'或者' false'到布尔 false ,与true相同。

另一种方法是单独留下字符串,因此将布尔值和整数转换为字符串' true'和' false'。

if (!is_string($status)) $status = ($status) ? "true" : "false";
echo $status;