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')ます。

実行(!$var == 'something')すると、比較を実行する前に$varに対してブール演算が実行されます。!$ varは、$ varが空でない限り、falseを返すため、基本的に(false =='something')と表示され、falseになります。

于 2012-01-28T21:42:43.620 に答える
3

あなたの悪い論理はここにあります:

( $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;
}
于 2012-01-28T22:37:39.867 に答える
2

1)$var != 'something'「$varは「何か」ではありません」と言います。

2)!$var == 'something'「$varの否定は「何か」です」と言います。

表現は異なる意味を持っています。$varは「foobar」であると言ってテストします。2つの文は次のとおりです。

1)「foobar」は「何か」ではなく、

2)「foobar」の否定は「何か」です

ご覧のとおり、1)trueを返しますが、2)falseを返します。これは、「foobar」の否定が何であれ、それでも「something」と等しくないためです。

于 2012-01-28T22:01:47.043 に答える