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

时间:2016-04-20 17:30:38

标签: php

所以我理解这一点 - 比较/检查值。然而,我正在搞乱,并注意到我所有测试的结果是相同的 - 其中一些我被教导(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(),这基本上是相同的。

第一个例子,对吗?如果没有,为什么它有效?或者这是不赞成的东西而不是实践 - 或者甚至是新的东西?

2 个答案:

答案 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...')))