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();
这是我的尝试,我现在很头疼,它发出了返回消息,我不知道为什么
!($var == 'something')
与($var != 'something')
相同。
执行(!$var == 'something')
将在进行比较之前对$var执行布尔运算。 !$var 将返回 false,除非$var为空,所以它本质上是在说 (false == 'something'(,这将是假的。
你的糟糕逻辑在这里:
( $embedmode != 'normal' || $embedmode != 'popup' || $embedmode != 'popup' )
如果$embedmode
等于 'normal'
,则$embedmode != 'popup'
,所以这整个位都是 TRUE。我相信你想替换 ||与 &&.
对于更容易推理的代码,我可能会使用 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;
}
1($var != 'something'
说"$var不是'某物'"。
2(!$var == 'something'
说"对$var的否定是'某物'"。
这些表达意味着不同的东西。用说$var是"foobar"来测试它,你的两句话是:
1("foobar"不是"某物",并且
2(对"福巴"的否定是"某物">
如您所见,1(将返回true,但2(将返回false,因为对"foobar"的否定仍然不等于"某物"。