这2'IF'有什么区别?

时间:2012-01-31 16:25:52

标签: php

鉴于此:

$ids = '';

我刚刚意识到这一点:

$single = $ids == FALSE || is_array($ids)? FALSE : TRUE;
var_dump($single);

和此:

if ($ids == FALSE) 
{
    $single = TRUE;     
}
else 
{
    if (is_array($ids)) 
    {
        $single = FALSE;
    } 
    else 
    {
        $single = TRUE;
    }
}
var_dump($single);

显示不同的结果(分别为false和true)。但是,这仅在变量为:

时发生
$ids = '';

$ids;

如果$ ids是一个数组,一个整数或一个字符串,它可以正常工作。 有人知道为什么吗?提前致谢!

顺便说一下,我刚刚意识到,如果你在第一个条件状态(单行第一个)中键入$ ids === FALSE,它将正常工作。但我仍然不明白这背后的“逻辑”。

3 个答案:

答案 0 :(得分:5)

你忘了括号:

$single = (($ids == FALSE) || (is_array($ids)? FALSE : TRUE));
var_dump($single);

// Output: true

Live demo

没有它们,优先级gives you a result different from that which you were expecting

<?php
$id = '';

$single =  $ids ==  FALSE ||  is_array($ids)? FALSE : TRUE;
//        (        (                        )             )
//                   FALSE                    FALSE

var_dump($single); // False


$single = (($ids == FALSE) || (is_array($ids)? FALSE : TRUE));
//              TRUE       ||       FALSE

var_dump($single); // True
?>

请注意,'' == FALSEtrue;我不确定你是否意识到这一点。

答案 1 :(得分:1)

两个例子中的操作顺序不同。第一个解析为:

$single = ( $ids == FALSE || is_array($ids) ) ? FALSE : TRUE;

第二个等于:

$single = ( $ids == FALSE ) || ( is_array($ids)? FALSE : TRUE );

答案 2 :(得分:0)

我可能错了,但可能是因为你要返回一个布尔等值(1/0)或一个真假字符串。如果你想要绝对平等,请尝试使用3个等号。

相关问题