我试图理解下面的代码,但我对 &&
运算符的使用感到困惑。
请解释以下代码中&&
操作的目的
function getErrors($autoClean=TRUE) {
$retVal = $this->getErrorMessages();
$autoClean && $this->unsetErrorMessages();
return $retVal;
}
最佳答案
在这里,&&
充当 short-circuit运算符(另请参见代码示例 here)。
- 如果
$autoClean
的计算结果为true
,$this->unsetErrorMessages()
将 被处决。 - 如果
$autoClean
的计算结果为false
,$this->unsetErrorMessages()
将不会 被处决。
使用 ||
而不是 &&
会逆转这种行为。
同样的行为显然也可以通过添加额外的 if
语句来实现。这样做:
a && b()
可以改写为if (a) { b(); }
一个|| b()
可以重写为if (!a) { b(); }
虽然使用短路运算符可以减少行数,但也会使代码更难阅读。
就执行速度而言,应该没有明显差异。
更新
我不得不收回之前关于执行速度没有明显差异的说法。给定以下两个测试脚本,即带有短路运算符的版本:
<?php
$a = true;
function b() { global $a; $a = !$a; }
for ($i = 0; $i < 10000000; $i++) {
$a && b();
}
?>
还有一个带有 if
语句的版本:
<?php
$a = true;
function b() { global $a; $a = !$a; }
for ($i = 0; $i < 10000000; $i++) {
if($a) { b(); }
}
?>
事实证明,在我的 PHP 5.5.9 版本上,第二个版本(使用 if
语句)快了大约 40%(~450ms 对比 ~750ms)在 Ubuntu 14.04 LTS(64 位)上运行。
结果可能因不同的 PHP 版本和操作系统而异,但至少在我的机器上我始终注意到执行速度的显着差异。
关于php - && 运算符的异常使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31847546/