这两个php条件的区别是什么?

时间:2014-10-12 08:29:37

标签: php conditional-statements

我正在尝试检查$ _GET [' id']是否已设置并且是数字否则会导致代码执行死亡。

以下两个代码对我有用,但想知道它们之间的区别是什么?

php condition 1

<?php
if(!isset($_GET['id']) || (isset($_GET['id']) && !is_numeric($_GET['id']))) {
die();
}

php condition 2

<?php
if(!isset($_GET['id']) || !is_numeric($_GET['id'])) {
die();
}

3 个答案:

答案 0 :(得分:5)

不同之处在于,如果设置了$_GET['id'],第一个会进行不必要的额外检查。 PHP使用所谓的短路布尔评估,这意味着如果||的左侧为真,则右侧不需要进行评估。因此,即使在第二个示例中,!is_numeric($_GET['id'])也永远不会被评估,除非isset($_GET['id'])为真。

逻辑上这些陈述是等价的。

答案 1 :(得分:3)

你基本上在做

A || (!A && B)

如果Atrue,则其他内容将不会被执行。

如果A为false,则!A无论如何都是真的。所以!A是多余的。

在功能上它们是相同的,但在实践中,你不需要额外的条件。

您可以在此处查看逻辑解释:

Logic

答案 2 :(得分:-4)

在第一个 它进行三次检查是不必要的。 在第二个中它不会捕获所需的条件之一

||表示OR - 其中一个条件应评估为真

&安培;&安培;意味着AND - 两个条件都必须为真

要正常工作,您需要这个

if (!isset($_GET['id']) && !is_numeric[$_GET['id']])
    die();

第一个声明做同样的事情,但检查$ _GET [&#39; id&#39;]是否设置了两次,这是不需要的。