PHP-如果单个值等于多个选项


PHP - if single value equals multiple options

所以我理解这一点——以及比较/检查值。然而,我很困惑,注意到我所有测试的结果都是一样的——其中一些测试告诉我(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...')))