PHP || and && 逻辑优化

标签 php performance optimization logic

我有点像优化狂(至少按照我的定义),这个问题困扰了我很长一段时间。

我想知道 PHP 是否对 && 和 || 做了一些优化: 举个例子:

$a = "apple";
$b = "orange";
if ($a == "orange" && $b == "orange") {
    //do stuff
}

当该代码执行时,它将检查 $a 是否等于“orange”。在这种情况下不是。但是,有一个 && 运算符。由于第一部分 ($a == "orange") 已经返回 false,PHP 是否还会检查 $b 是否等于 "orange"?

我对||有同样的问题:

$a = "orange";
$b = "orange";
if ($a == "orange" || $b == "orange") {
    //do stuff
}

当它检查 $a 是否等于“orange”时,它返回 true。因为那样会使 ||运算符返回 true,PHP 会检查 || 的第二部分吗? (因为我们已经知道这是真的)?

希望我在这里说得有道理,也希望有人能为我解答。谢谢!

最佳答案

PHP 使用 short circuit evaluation使用二进制条件(例如 &&|| 或它们的等价常量),因此如果评估 LHS 的结果意味着 RHS 不是必需的,则它不会.

例如……

method_exists($obj, 'func') AND $obj->func();

...是对这一事实的利用。在此示例中,仅当 LHS 返回 truthy 值时,才会评估 RHS。这里的逻辑很有意义,因为您只想调用一个存在的方法(只要您不使用 __call(),但那是另一回事了)。

您也可以以类似的方式使用OR

defined('BASE_PATH') OR die('Restricted access to this file.');

此模式经常用作 PHP 文件中的第一行,这些文件旨在包含而不是直接访问。如果 BASE_PATH 常量不存在,则 LHS 为 falsy 因此它执行 RHS,die() 脚本。

关于PHP || and && 逻辑优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10060018/

相关文章:

android - 如何使用 SAF(存储访问框架)编辑 SD 卡中已经存在的文件?

python - 使用 pandas dataframe 中的 JSON 对象优化解析文件,其中某些行中可能缺少键

c++ - g++ 对 -Ofast 做了哪些额外的优化?

php - 数据未插入数据库到表中

php - 使用php从sql表中提取列

javascript - 缓存 event.target 有意义吗?

python - 优化递归代码以从输入数组生成有效数组

python - Python 中的高效二维互相关?

php - PDOStatement::execute(): SQLSTATE[HY093]: 参数编号无效:参数未在第 29 行的 add_product.php 中定义

PHP mssql 对于不同的语句表现得很奇怪