所以我理解这一点——以及比较/检查值。然而,我很困惑,注意到我所有测试的结果都是一样的——其中一些测试告诉我(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()
,这基本上是一样的。
第一个例子正确吗?如果没有,为什么它有效?或者这是一件令人不快且没有实践的事情,甚至可能是一件新的事情?
首先明确==
的优先级高于||
。这意味着你的两个if语句如下所示:
if (($status == 'in-progress') || 'in-review')
if ($status == ('in-progress' || 'in-review'))
现在,对于您的第一个if语句,无论$status
的值是什么,($status == 'in-progress')
的结果是什么,因为其中有一个OR,在它之后是'in-review'
,所以您的if语句将始终为true,因为非空字符串是truthy值。
对于您的第二个语句,这部分('in-progress' || 'in-review')
实际上可以归结为TRUE || TRUE
,其计算结果为TRUE。现在$status
只需要保持一个truthy值,if语句就会为true。
不,那个代码永远不会工作。||
的优先级低于==
,因此您将$status
与第一个值进行比较,然后将布尔值||
"或"另一个值
if (($status == 'foo') || ('bar'))
您必须单独比较这些值:
if (($status == 'foo') || ($status == 'bar'))
对于许多值来说,这会变得乏味。一个快速破解是使用数组:
if (in_array($status, array('foo', 'bar', 'baz', 'qux', 'etc...')))