鉴于此:
$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,它将正常工作。但我仍然不明白这背后的“逻辑”。
答案 0 :(得分:5)
你忘了括号:
$single = (($ids == FALSE) || (is_array($ids)? FALSE : TRUE));
var_dump($single);
// Output: true
没有它们,优先级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
?>
请注意,'' == FALSE
为true
;我不确定你是否意识到这一点。
答案 1 :(得分:1)
两个例子中的操作顺序不同。第一个解析为:
$single = ( $ids == FALSE || is_array($ids) ) ? FALSE : TRUE;
第二个等于:
$single = ( $ids == FALSE ) || ( is_array($ids)? FALSE : TRUE );
答案 2 :(得分:0)
我可能错了,但可能是因为你要返回一个布尔等值(1/0)或一个真假字符串。如果你想要绝对平等,请尝试使用3个等号。