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

AMB*_*AMB 1 php conditional-statements

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

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

php条件1

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

php条件2

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

Roe*_*ers 5

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

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