fru*_*cup 6 php optimization performance logic
我是一个优化狂热者(至少按照我的定义),这个问题已经困扰了我很长一段时间.
我想知道PHP是否对&&和||进行了一些优化:采用以下示例:
$a = "apple";
$b = "orange";
if ($a == "orange" && $b == "orange") {
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
当该代码执行时,它将检查$ a是否等于"orange".在这种情况下,它不是.但是,有一个&&运算符.由于第一部分($ a =="orange")已经返回false,PHP仍会检查$ b是否等于"orange?"
我对||有同样的问题:
$a = "orange";
$b = "orange";
if ($a == "orange" || $b == "orange") {
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
当它检查$ a是否等于"orange"时,它返回true.因为那会使|| 运算符返回true,PHP甚至会检查||的第二部分 (因为我们已经知道它会是真的)?
希望我在这里有意义,希望有人能给我一个答案.谢谢!
PHP使用二进制条件(例如,或它们的常量等价物)进行短路评估,因此如果评估LHS的结果意味着RHS不是必需的,则不会.&&||
例如...
method_exists($obj, 'func') AND $obj->func();
Run Code Online (Sandbox Code Playgroud)
......是对这一事实的利用.只有在此示例中LHS返回真值时才会评估RHS .这里的逻辑是有道理的,因为你只想调用一个方法(只要你没有使用__call(),但这是另一个故事).
您也可以OR以类似的方式使用.
defined('BASE_PATH') OR die('Restricted access to this file.');
Run Code Online (Sandbox Code Playgroud)
此模式通常用作PHP文件中的第一行,这些文件旨在包含在内,而不是直接访问.如果BASE_PATH常量不存在,则LHS是假的,因此它执行RHS,即die()脚本.
| 归档时间: |
|
| 查看次数: |
643 次 |
| 最近记录: |