PHP如果不是空字符串和string =“this”或“that”怎么做?

时间:2012-01-28 21:39:20

标签: php if-statement var equals-operator

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

这是我的尝试,我现在感到头痛,它发出了回复信息,我不知道为什么

3 个答案:

答案 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_arrayswitch,如下所示:

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'的否定是,它仍然不等于'某事'。