2009-03-04 21 views
0

私は時々ELSEIFを使う必要はないと思います。複数のインライン条件AND OR ELSEIF

私は以前これを行っています。

私はこの単純な行を試しているだけで、それを動作させることはできません。

私はそれを読んでいます:

ORは||と同じです。

と& &

コード(短い道が、動作しません)と同じである:

コード:

if((subdom!='www') || ($subdom!='nosub')){} 
私もこれを試してみました

if($subdom<>'www' or $subdom<>'nosub') 
{do some stuff if any of the two are meet} 

thのいずれかを調べる正しい演算子は何でしょうか2つ?それは?または& &。 !=または<も使用する必要がありますか? $ aと$ b両方に該当する場合

$ & & $ bの
//と// TRUE:

いくつかの情報は、質問回答後に発見されました。

$ a || $ b
//または、$ aまたは$ bのいずれかがTRUEの場合はTRUEになります。

これらのどちらかが比較として動作します!

==(同じ等しくない)ではなく、=それは>
< "を割り当てない" を意味しますとはめちゃくちゃうまく行くことなくトリックを行います。

+0

だから何が問題なのですか? – strager

+0

質問はどうやって使用するか||または複数の条件をインラインで実行するには&&を使用します。 – Codex73

+1

新しい情報が間違っています、!=うまくいきます。 –

答えて

5

あなたの式は常に真である、あなたの例を考えると、$のsubdomのための異なる入力値で表をご確認ください:

$ exprの=($のsubdom = 'WWW'!)|| ($ subdom!= 'nosub');

私はあなたがここにAND(& &)演算子を使用したいとしていると思います
 
    $subdom  ($subdom!='www')  ($subdom!='nosub')  result 
    ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
    www  |  false   |  true   |  true | 
    nosub |  true   |  false  |  true | 
    anything |  true   |  true   |  true | 
    blah! |  true   |  true   |  true | 

...

+0

これは実際に動作しています。 &&と<>を使用する – Codex73

1

これらの演算子は同じ意味を持っていますが、異なるprecedence

false && true or true // = (false && true) or true => true 
false and true || true // = false and (true || true) => false 
+0

もう少し説明できますか?私はリンク "優先順位"を読んで、彼らは両方が同じように見える。私が&&を使用するとうまくいき、||それはしません。私は基本的に、2つの作品のいずれかが真であることを条件とします。 &&はANDを表しています。これは私には、TRUEを出力するためには2つが一致しなければならないことを意味します。 – Codex73

+0

これらは同じではありません。 ANDは&&よりも優先順位が低くなります。インタプリタが両方の演算子で条件を満たす場合は、優先順位の高いものを最初に評価します。これはあなたの条件で1つの演算子を使用するか、比較ごとに括弧を使用する場合(これは常にとにかく行う必要があります)は関係ありません。 – monzee

3

あなたは慎重にあなたが表現しようとしているロジックを通して考える必要があります。

「サブドメインが 'www'ではない場合、またはサブドメインが 'nosub'でない場合」というロジックが表示されます。どちらかが真であれば、コードが実行されます。

のは、この上でいくつかのテストケースを試してみましょう:

  • nosub:これはない:これは、その条件が真であるので、
  • ランダムコードを実行し、 "WWW" ではありません「WWW」または「nosub」ので、両方の条件が真である、コードを実行
  • WWW:これは、条件が真であるので、コードを実行し、「nosub」ではない

基本的には、すべてのことが真実になるように作られています。あなたが実際に表現しようとしているのは、「サブドメインは「www」ではなく、「nosub」ではありません。つまり、それらのどちらでもない場合は、コードを実行する必要があります。

正しいif文は、if ($subd != 'nosub' && $subd != 'www')です。

これに問題がある場合は、ifステートメントの中に入れたロジックを思いつくプロセスを変更する方が良いかもしれません。ここにあなたがそれをどのように構築するかについての説明があります。

まず、「良い」と考えている状態から始めます。 "良い"条件は "$ subdは 'www'または 'nosub'のいずれかです。これのためのifステートメントは次のようになります:if ($subd == 'www' || $subd == 'nosub')

これで、条件が悪いので、良い状態とは逆の条件を満たす必要があるコードを記述しようとしています。ブール条件の反対を取るには、全体をNOTで囲みます。コード内:if !($subd == 'www' || $subd == 'nosub')(感嘆符の前に注意してください)

あなたがそのネゲートを(元々しようとしていたように)内部に移動したいのであれば、それはブール代数のプロパティです(私はこれが正しい用語であることを願っています。そのような関係に否定を移動し、両方のオペランドを否定し、ANDからORへ、またはその逆にも演算子を変更します。この場合、カッコ内のマイナス記号を移動すると、==!=となり、||&&となり、上記のようにif ($subd != 'www' && $subd != 'nosub)となります。

:最後の段落で述べたプロパティは、De Morgan's lawsと呼ばれています。

+0

ご意見ありがとうございます。 – Codex73

0

すべての文字列がチェックに合格するため、ifが間違っています。すべての文字列は 'www'ではなく 'nosub'ではありません。 これは、==を使用する方が一般的に!=よりも優れているからです。

2

「or」ではなく「and」を使用したいと思います。

両方の条件に 'または'を使用すると、文字列は常に値の1つにならないため、常に真となります。

0

私はメンバーのように、独自のサブドメイン何かから自分の通過を推測していますので、あなたは、次の

が必要
if(($dom == 'www') || ($dom == 'nosub')) 
{ 
    echo 'go away'; 
}