如果第一个参数的计算结果为 false,php 是否会计算 or 语句的第二个参数?

所以我的问题是关于 php 在 or 语句采用两个函数的情况下的行为。当第一个函数的计算结果为 true 时,第二个函数是否仍有可能被执行?


我希望下面的代码可以澄清我的意思:


$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 语句会在评估为 true 时返回 true !$stmt->execute(),并且我可以确定除非bar()评估!$stmt->execute()为 false(意味着$stmt->execute()评估为 true 并且查询成功),否则不会调用该语句。


我在 php 中是否有这种确定性,或者服务器是否有可能同时或以相反的顺序进行评估$stmt->execute(),bar($id)并以这种方式对我的数据库造成严重破坏?


我假设我也能够将我在这里得到的任何答案应用到 and 声明中。如果情况并非如此,请告诉我。


元芳怎么了
浏览 97回答 1
1回答

绝地无双

逻辑运算符||意味着如果第一个表达式的计算结果为 true,则不会执行第二个表达式。如果您使用or,|则即使第一个表达式的计算结果为 true,也会计算第二个表达式。if ($expression || $expression) {     //     }在这里,如果第一个表达式的计算结果为 true,则不||会让第二个表达式计算并且流程在if块中继续。仅当第一个表达式变为 时才计算第二个表达式false。这个布尔运算与主要编程语言中的解释完全一样,而不仅仅是在 php 中。如果您想深入了解,请访问php Doc 中的逻辑运算符。根据优先规则,逻辑运算符||具有左关联性,规定左表达式始终首先计算,如果左表达式失败,则将计算右表达式。
打开App,查看更多内容
随时随地看视频慕课网APP