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'))