0
/* Create Theme Rules */
if($selectedTheme=='spring' or 'framed' or 'art' or 'champagne'){
  echo 'yes';
}

上記のいずれかに等しい場合にのみ実行する必要があるこのスクリプトがありますが、すべてのテーマで実行されます。$selectedThemeこれはうまくいきます:

  if(
    ($selectedTheme==('spring') or 
    ($selectedTheme==('framed')) or 
    ($selectedTheme==('art')) or 
    ($selectedTheme==('champagne')))
   )
     { echo 'yes'; }

しかし、それは多くの不要なコードのようです。ここで私は何を誤解していますか?

4

3 に答える 3

1

次の評価を見てください。

($selectedTheme==('spring') or 
($selectedTheme==('framed')) or 
($selectedTheme==('art')) or 
($selectedTheme==('champagne')))

それは実際に行います:

  1. 式全体が true の場合はと比較$selectedTheme'spring'、そうでない場合は と比較しますtrue

  2. 比較$selectedThemeする'framed'-true式全体が true の場合、そうでない場合は、

  3. 式全体が true の場合はと比較$selectedTheme'art'、そうでない場合は と比較しますtrue

  4. 比較$selectedThemeする'champagne'-true式全体が true の場合、そうでない場合、式はfalse,

その間:

 ($selectedTheme=='spring' or 'framed' or 'art' or 'champagne')

する:

  1. 式全体が true の場合はと比較$selectedTheme'spring'、そうでない場合は、true

  2. if 'framed'is truereturn true- 空でない文字列は、ブール値として使用されると true として解決されるため、式全体が常に true になります。

結果として、前者のコードは常に真ですが、後者は期待どおりに機能します。プログラミング言語は一種の厳格であり、言語の定義で公然と許可されていない限り、精神的な飛躍に頼るべきではありません。@bwoebi によって短い交換が提示されました。

于 2013-04-27T16:40:34.010 に答える
1

あなたの表現:

if ($selectedTheme == 'spring' or 'framed' or 'art' or 'champagne')

or比較的少数のプログラミング言語で共有されている英語の解釈を使用しています。への引数orは通常独立しているため、上記では、選択したテーマが と等しい'spring'か、文字列'framed'が (それ自体で) true であるか、文字列'art'が true であるか、文字列が true であるかを尋ねて'champagne'います。PHP では空でない文字列はすべて true であるため、式全体は常に true です。

長い形式の繰り返しを避ける方法はたくさんありますifin_array@bwoebiが提案したように、最も簡単なのはおそらくです。

于 2013-04-27T16:36:55.027 に答える