/* 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'; }
但这似乎是很多不必要的代码。 我在这里误解了什么?
答案 0 :(得分:2)
以上你做不到;它只是评估为$selectedTheme=='spring' or true or true or true
。
更短,更少冗余的版本将是:
if (in_array($selectedTheme, ['spring', 'framed', 'art', 'champagne'])) // PHP 5.4 syntax (use array(...) if you have PHP 5.3 or lower)
你也可以使用没有休息和很多情况的开关:
switch ($selectedTheme) {
case 'spring':
case 'framed':
case 'art':
case 'champagne':
// do something
}
答案 1 :(得分:1)
你的表达:
if ($selectedTheme == 'spring' or 'framed' or 'art' or 'champagne')
正在使用由相对较少的编程语言共享的英语or
的解释。 or
的参数通常是独立的,因此以上是询问所选主题是否等于'spring'
,或者字符'framed'
是(自己的)是真的,还是字符串'art'
为true,或字符串'champagne'
为true。由于PHP中的任何非空字符串都是正确的,因此表达式总是为真。
有很多方法可以避免重复长篇if
;最简单的可能是in_array
,正如@bwoebi建议的那样。
答案 2 :(得分:1)
看看评估:
($selectedTheme==('spring') or
($selectedTheme==('framed')) or
($selectedTheme==('art')) or
($selectedTheme==('champagne')))
确实如此:
将$selectedTheme
与'spring'
进行比较,如果其true
整数表达式为真,否则
将$selectedTheme
与'framed'
进行比较 - 如果true
整个表达式为真,则
将$selectedTheme
与'art'
进行比较,如果其true
整数表达式为真,否则
将$selectedTheme
与'champagne'
进行比较 - 如果true
整个表达式为true,则表达式为false
,
,同时:
($selectedTheme=='spring' or 'framed' or 'art' or 'champagne')
确实
将$selectedTheme
与'spring'
进行比较,如果true
整个表达式为真,则
如果'framed'
为true
返回true
- 非空字符串在用作布尔值时被解析为true,因此整个表达式始终为true。
结果你以前的代码总是正确的,而后者的代码是你期望的。编程语言有点严格,除非语言的定义公开允许,否则你不应该依赖于精神上的飞跃。 @bwoebi提供了更短的替换。