2012-01-28 2 views
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(); 

は、これが私の試みであり、私はそれがリターン・メッセージを出して、私は空の文字列ではなく、文字列= "this"か "that"のいずれかを行う方法は?

+2

でどんな言語で演算子の優先順位に依存します。 –

+0

私はPHPの専門家ではありませんが、一方は直接不等式をテストし、もう一方は等価性を比較するオペランドビフォーを否定することをお勧めします。否定の結果は何ですか? – slugster

答えて

3

あなたの悪いロジックがここにあります。私はあなたが|| & &である。推論する方が簡単ですコードの場合

、私はおそらくこのように、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; 
} 
+0

私はちょうどそれを自分自身を考え出し、その後私はあなたのポストを見ました。私は別のケースでこれを使ったときに '$ iframe = false; 場合($プロバイダ== "Dailymotionの" || \t $プロバイダ== "dailymotionlist" || \t $プロバイダ== "ユーチューブ" || \t $プロバイダ== "youtubelist" || \t $プロバイダ= = "Vimeoの" || \t $プロバイダ== "collegehumor" || \t $プロバイダ== "funnyordie" || \t $プロバイダ== "bliptv") \tはiframe = trueを$; ​​' –

+0

@peaceinfo、あなたがそれについて考えるなら、奇妙ではない。しかし、あなたがそれを理解してうれしい。他の2つのヒント:私は単一行のステートメントでも大括弧を使いたいので、行を追加する必要はありません。有効な値に名前付き定数を使用すると、誤植を避けて変更を簡単にすることができます。 (つまり、[Magic Numbers](http://en.wikipedia.org/wiki/Magic_number_(プログラミング)#Unnamed_numerical_constantsを使用しないでください)。 – grossvogel

5

!($var == 'something')($var != 'something')と同じになり、なぜ知らない今頭痛を取得しています。

Doing (!$var == 'something')は、比較を行う前に$ varに対してブール演算を実行します。 !$ varは、$ varが空でない限り、falseを返します。したがって、本質的には(false == 'something')、falseになります。

2

1)$var != 'something'は、 "$ var IS NOT 'something'と表示しています。

2)!$var == 'something'は、「$ var N 'は何か」と言っています。

表現はさまざまな意味を持ちます。

1) 'foobarには '何か'、および

2) 'foobarに' が否定されていない '何か'

:$のVARと言ってそれをテストすることは、あなたの2つの文があり、 'foobarに' です

ご覧のとおり、1)はtrueを返しますが、2)falseを返します。なぜなら、「foobar」の否定は「何か」と等しくないからです。その後、$embedmode != 'popup''normal'等しい

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

$embedmode場合は、ので、この全体のビットはTRUEです:

+0

okありがとうtest2は私が実際に思っていたことをやっていないように見えます。どのようにしてtest1を動作させるのですか? –

関連する問題