这2'IF'有什么区别?

Joh*_*ard 1 php

鉴于这种:

$ids = '';
Run Code Online (Sandbox Code Playgroud)

我才意识到这一点:

$single = $ids == FALSE || is_array($ids)? FALSE : TRUE;
var_dump($single);
Run Code Online (Sandbox Code Playgroud)

还有这个:

if ($ids == FALSE) 
{
    $single = TRUE;     
}
else 
{
    if (is_array($ids)) 
    {
        $single = FALSE;
    } 
    else 
    {
        $single = TRUE;
    }
}
var_dump($single);
Run Code Online (Sandbox Code Playgroud)

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

$ids = '';
Run Code Online (Sandbox Code Playgroud)

要么

$ids;
Run Code Online (Sandbox Code Playgroud)

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

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

Lig*_*ica 5

你忘了括号:

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

// Output: true
Run Code Online (Sandbox Code Playgroud)

现场演示.

没有它们,优先级会给你一个与你期望的结果不同的结果:

<?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
?>
Run Code Online (Sandbox Code Playgroud)

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