如果第一个参数的计算结果为假,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 将被评估。