以下是哪种条件陈述是最佳做法:
if ($_GET['type'] == 'user' || $_GET['type'] == 'salesmen')
或
if ($_GET['type'] == ('user' || 'salesmen'))
感谢您的帮助。
答案 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)
答案 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
。