哪个条件陈述是正确的?

时间:2014-02-24 10:04:33

标签: php conditional

以下是哪种条件陈述是最佳做法:

if ($_GET['type'] == 'user' || $_GET['type'] == 'salesmen')

if ($_GET['type'] == ('user' || 'salesmen'))

感谢您的帮助。

6 个答案:

答案 0 :(得分:6)

始终使用第一个:

if ($_GET['type'] == 'user' || $_GET['type'] == 'salesmen')

第二个是有效的PHP实践,但它会产生意想不到的结果(不是你期望的输出)。

答案 1 :(得分:4)

你试过吗?一个简单的尝试就会指出第二部分不会按预期工作。

但是,我建议in_array()

if (in_array($_GET['type'], array('user', 'salesmen'))) {
   //
}

$type = array('user', 'salesmen');
if (in_array($_GET['type'], $type)) {
    //
}

答案 2 :(得分:2)

第一个是正确的。在第二个实际上,您实际上是将$_GET['type']与布尔表达式('user' || 'salesmen'

进行比较

答案 3 :(得分:2)

在你的第二个例子中

('user' || 'salesmen')

将首先评估,这将导致布尔值为true。 导致以下表达式被评估为第一个:

$_GET['type'] == true

哪些可能是也可能不是。在这种情况下,如果$ _GET ['type']为1,true,对象,字符串或任何其他计算结果为true的情况,则为true。这方面隐藏在您的问题中,但我想强调可以通过使用身份运算符(===)来阻止它。

更漂亮(imho):

$typeIsUser = $_GET['type']  === 'user';
$typeIsSalesMan = $_GET['type'] === 'salesmen';
if ($typeIsUser  || $typeIsSalesmen){
...
}

或者使用in_array!可能性是无穷无尽的。

答案 4 :(得分:1)

第一个选项是有效选项,第二个选项不是您认为的选项。

您可以在此处找到有关实现此目标的各种选项的完整讨论:

Compare multiple values in PHP

答案 5 :(得分:1)

您要做的第一件事是确保参数存在,否则您可能会看到有关缺少数组索引的注意事项,其中包含/page?foo=bar这样的网址:

if (isset($_GET['type'])) { ... }

将其与其余代码相结合:

if (isset($_GET['type']) && ($_GET['type'] == 'user' || $_GET['type'] == 'salesmen')) { ... }

可替换地:

if (isset($_GET['type']) && in_array($_GET['type'], ['user', 'salesmen'])) { ... }

顺便说一下

此代码:

if ($_GET['type'] == ('user' || 'salesmen'))

$_GET['type']true进行比较,对大多数值产生true