2010-11-18 82 views
20

我有一个条件语句这样的:PHP懒布尔评估

if($boolean && expensiveOperation()){ ...} 

确实PHP有懒布尔评估,即会检查它$boolean,如果是假的也懒得进行昂贵的操作?如果是这样,我应该把我的变量放在什么顺序?

+0

我一般会从把2个操作在同一行的代码,如果他们不是固有地与克制。它使得可读性变得困难,并且你不会获得计算时间或资源。 – 2010-11-18 16:02:30

+1

Apols for my incorrect answer(now deleted)。我以为我记得试过这个,发现它不起作用,但我显然错了。 – 2010-11-18 16:05:24

+0

@Nathan至少你得到了同伴压力徽章:) – 2010-11-18 16:07:30

回答

23

是的。这就是所谓的短路评估。请参阅关于documentation page的评论...

至于订单,它会根据Operator Precedence执行检查,然后从左到右。所以:

A || B || C 

将评估第一个,然后只有B,如果A是假的,和C仅当A和B都是假的......

A AND B || C 

总是会评估B || C,因为||具有比AND更高的优先级(对于&&不是这样)。

+0

如果你想*非shor电路评估你可以使用一个单一的&将是一个布尔联合功能。它会计算两个值,然后尝试在它们之间执行AND。 – Mikhail 2010-11-18 15:59:25

+8

@Mikhail:是的。但是你必须小心,因为单词'&'实际上是一个按位运算符。所以'true&2'将是错误的(因为'true'是'00000001','2'是'00000010',所以'AND'将是'00000000')... – ircmaxell 2010-11-18 16:01:11

+0

@Alin:谢谢!大坝谷歌带我到错误的文档...修复答案。谢谢! – ircmaxell 2010-11-18 16:04:47