function test(){
$embedmode = 'normal';
if ( ( $embedmode != '' ) && ( $embedmode != 'normal' || $embedmode != 'popup' || $embedmode != 'popup' ) )
return "<p>ARVE Error: mode is not set to 'normal', 'popup' or 'special' maybe typo</p>";
elseif ( $embedmode == '')
$mode = 'default';
else
$mode = $embedmode;
echo '<pre>';
var_dump($mode);
echo "</pre>";
}
echo test();
这是我的尝试,我现在感到头痛,它发出了回复信息,我不知道为什么
答案 0 :(得分:5)
!($var == 'something')
与($var != 'something')
相同。
在进行比较之前,执行(!$var == 'something')
会对$ var执行布尔运算。 !$ var将返回false,除非$ var为空,所以它基本上会说(false =='something'),这将是假的。
答案 1 :(得分:3)
你的坏逻辑在这里:
( $embedmode != 'normal' || $embedmode != 'popup' || $embedmode != 'popup' )
如果$embedmode
等于'normal'
,那么$embedmode != 'popup'
,所以整个位都为TRUE。我相信你想要替换||与&amp;&amp ;.
对于更容易推理的代码,我可能会使用in_array
或switch
,如下所示:
switch ($embedmode) {
case 'normal':
case 'popup':
case 'special':
// valid, proceed
break;
case '':
$embedmode = 'default';
break;
default:
trigger_error ("Embed mode '$embedmode' not valid.");
break;
}
答案 2 :(得分:2)
1)$var != 'something'
说“$ var IS not'something'”。
2)!$var == 'something'
说“$ var IS'的某种东西'”。
这些表达意味着不同的东西。测试它说$ var是'foobar',你的两个句子是:
1)'foobar'不是'某事',而且
2)'foobar'的否定是'某事'
正如你所看到的,1)将返回true,但2)将返回false,因为对'foobar'的否定是,它仍然不等于'某事'。