所以我理解这一点 - 比较/检查值。然而,我正在搞乱,并注意到我所有测试的结果是相同的 - 其中一些我被教导(a)没有工作或(b)不正确。
注意,我正在运行PHP7。好的,我的观点。如果单个值等于多个选项之一,我能够实现相同的结果检查......
这些工作......为什么?不是我学习的方式。
if ($status == 'in-progress' || 'in-review')
// and even
if ($status == ('in-progress' || 'in-review')) // kind of similar to ASP.NET Razor
我通常会重复检查,例如:if($stat == 'a' || $stat == 'b')
甚至是in_array()
,这基本上是相同的。
第一个例子,对吗?如果没有,为什么它有效?或者这是不赞成的东西而不是实践 - 或者甚至是新的东西?
答案 0 :(得分:6)
首先要明确==
的{{3}}比||
更高。这意味着你的两个if语句如下所示:
if (($status == 'in-progress') || 'in-review')
if ($status == ('in-progress' || 'in-review'))
现在为你的第一个if语句,无论$status
具有什么值以及($status == 'in-progress')
的结果是什么,因为你在其中有一个OR并在'in-review'
之后你的if语句总是是的,因为非空字符串是真正的值。
对于你的第二个陈述,这部分('in-progress' || 'in-review')
字面上是TRUE || TRUE
,其评估为TRUE。现在$status
只需要保持一个真值,if语句就是真的。
答案 1 :(得分:3)
不,该代码永远不会有效。 ||
的优先级低于==
,因此您需要将$status
与第一个值进行比较,然后是布尔||
"或"另一个值
if (($status == 'foo') || ('bar'))
您必须单独比较这些值:
if (($status == 'foo') || ($status == 'bar'))
这对许多价值观来说都很乏味。快速入侵是使用数组:
if (in_array($status, array('foo', 'bar', 'baz', 'qux', 'etc...')))