如果第一个参数的计算结果为假,php 是否计算 or 语句的第二个参数?
Does php evaluate the second argument of an or statement if the first evaluates to false?
所以我的问题是关于 php 在 or 语句采用两个函数的情况下的行为。当第一个函数的计算结果为真时,是否还有机会执行第二个函数?
希望下面的代码能说明我的意思:
$dbh->startTransaction();
$stmt = $dbh->prepare("DELETE FROM foo WHERE id=:id");
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
if (!$stmt->execute() || !bar($id)) {
$dbh->rollBack();
}
我想确定的是 bar()
在 $stmt
执行失败时 从未被调用 。
我知道在某些语言中 or 语句会 return 在 !$stmt->execute()
评估为真时为真,并且我可以确定 bar()
不会被调用,除非 !$stmt->execute()
评估为假(意思是 $stmt->execute()
评估为真并且查询成功)。
我在 php 中是否有这种确定性,或者服务器是否有可能同时或以相反的顺序评估 $stmt->execute()
和 bar($id)
,并以这种方式对我的数据库?
我假设我也可以将我在这里得到的任何答案应用到 and 语句中。如果不是这样,请告诉我。
逻辑运算符 ||
表示如果第一个表达式的计算结果为真,它将不会执行第二个表达式。如果您使用 or
,|
那么即使第一个表达式的计算结果为真,第二个表达式也会被计算.
if ($expression || $expression) {
//
}
此处,如果第一个表达式的计算结果为真,则 ||
不会让第二个表达式计算并在 if
块中继续流动.仅当第一个表达式变为 false
.
时才计算第二个表达式
这个布尔运算与主要编程语言中的解释完全一样,不仅在 php 中。如果您想深入了解,请访问 Logical Operators in php Doc.
逻辑运算符 ||
根据 Precedance Rules 具有 左结合性 ,声明左表达式始终计算首先,如果 left 失败,则 right 将被评估。
所以我的问题是关于 php 在 or 语句采用两个函数的情况下的行为。当第一个函数的计算结果为真时,是否还有机会执行第二个函数?
希望下面的代码能说明我的意思:
$dbh->startTransaction();
$stmt = $dbh->prepare("DELETE FROM foo WHERE id=:id");
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
if (!$stmt->execute() || !bar($id)) {
$dbh->rollBack();
}
我想确定的是 bar()
在 $stmt
执行失败时 从未被调用 。
我知道在某些语言中 or 语句会 return 在 !$stmt->execute()
评估为真时为真,并且我可以确定 bar()
不会被调用,除非 !$stmt->execute()
评估为假(意思是 $stmt->execute()
评估为真并且查询成功)。
我在 php 中是否有这种确定性,或者服务器是否有可能同时或以相反的顺序评估 $stmt->execute()
和 bar($id)
,并以这种方式对我的数据库?
我假设我也可以将我在这里得到的任何答案应用到 and 语句中。如果不是这样,请告诉我。
逻辑运算符 ||
表示如果第一个表达式的计算结果为真,它将不会执行第二个表达式。如果您使用 or
,|
那么即使第一个表达式的计算结果为真,第二个表达式也会被计算.
if ($expression || $expression) {
//
}
此处,如果第一个表达式的计算结果为真,则 ||
不会让第二个表达式计算并在 if
块中继续流动.仅当第一个表达式变为 false
.
这个布尔运算与主要编程语言中的解释完全一样,不仅在 php 中。如果您想深入了解,请访问 Logical Operators in php Doc.
逻辑运算符 ||
根据 Precedance Rules 具有 左结合性 ,声明左表达式始终计算首先,如果 left 失败,则 right 将被评估。