Php 哪个条件语句是正确的?

Php 哪个条件语句是正确的?,php,conditional,Php,Conditional,以下哪种条件语句是最佳实践: if ($_GET['type'] == 'user' || $_GET['type'] == 'salesmen') 或 感谢您的帮助。始终使用第一个: if ($_GET['type'] == 'user' || $_GET['type'] == 'salesmen') 第二个选项是有效的PHP语句,但它会产生意外的结果(不是您期望的输出)。第一个选项是有效的,第二个选项没有执行您认为正确的操作 您可以在此处找到实现此目标的各种选项的完整讨论: 第一个是正确

以下哪种条件语句是最佳实践:

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


感谢您的帮助。

始终使用第一个:

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

第二个选项是有效的PHP语句,但它会产生意外的结果(不是您期望的输出)。

第一个选项是有效的,第二个选项没有执行您认为正确的操作

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


第一个是正确的。在第二个例子中,您实际上是在将
$\u GET['type']
与布尔表达式(
'user'| | salesman'
)进行比较。

您尝试过吗?一个简单的尝试会告诉你,第二部分不会像你预期的那样工作

但是,我建议在数组()中使用

在你的第二个例子中

('user' || 'salesmen')
将首先计算,这将导致布尔值为true。 导致对第一个表达式求值的表达式如下:

$_GET['type'] == true
这可能是真的,也可能不是真的。在本例中,如果$\u GET['type']为1、true、对象、字符串或任何其他计算结果为true的值,则为true。这个方面隐藏在您的问题中,但我想强调的是,可以通过使用identity操作符()来防止它

更漂亮(imho):


或者在数组中使用!可能性是无穷的。

您要做的第一件事是确保参数存在,否则您可能会看到关于缺少带有URL的数组索引的通知,如
/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'))

$\u GET['type']
true
进行比较,得到大多数值的
true

或者,我创建了一个包含元素“user”和“salesmen”的数组,然后使用in_array()函数使用条件。谢谢你的回答。这也应该行得通,当你需要比较很多值时,通常会使用这种方法。很好,第二个不会产生“意外”结果,结果在PHP中定义得很好–这不是OP想要的。值得注意的是,在PHP5.4中,他们添加了短数组,因此这更有趣:
if(在数组中($\u GET['type',['user','salesman'){
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'))