0
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();

这是我的尝试,我现在很头疼,它发出了返回消息,我不知道为什么

4

3 回答 3

5

!($var == 'something')将与 相同($var != 'something')

Doing(!$var == 'something')将在进行比较之前对 $var 执行布尔运算。!$var 将返回 false ,除非 $var 为空,因此它本质上会说 (false == 'something'),这将是错误的。

于 2012-01-28T21:42:43.620 回答
3

您的错误逻辑在这里:

( $embedmode != 'normal' || $embedmode != 'popup' || $embedmode != 'popup' )

如果$embedmode等于'normal',则$embedmode != 'popup',所以这整个位都是 TRUE。相信你要换|| 和 &&。

对于更容易推理的代码,我可能会使用in_arrayor 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;
}
于 2012-01-28T22:37:39.867 回答
2

1)$var != 'something'说“$var 不是‘某物’”。

2)!$var == 'something'说“$var 的否定是‘某事’”。

这些表达意味着不同的东西。用 $var is 'foobar' 来测试它,你的两句话是:

1) 'foobar' 不是'某物',并且

2)“foobar”的否定是“某物”

如您所见,1) 将返回 true,而 2) 将返回 false,因为无论 'foobar' 是什么,它仍然不等于 'something'。

于 2012-01-28T22:01:47.043 回答