PHP Lazy布尔评估

fre*_*ley 25 php lazy-evaluation

我有条件声明:

if($boolean && expensiveOperation()){ ...}
Run Code Online (Sandbox Code Playgroud)

PHP是否具有惰性布尔评估,即它是否会检查$boolean以及是否为假而不执行昂贵的操作?如果是这样,我应该把我的变量放在什么顺序?

irc*_*ell 29

是的,它确实.这被称为短路评估.请参阅文档页面上的注释...

至于订单,它会根据运营商优先顺序执行检查,然后从左到右执行检查.所以:

A || B || C
Run Code Online (Sandbox Code Playgroud)

将首先评估A,然后仅在A为假时进行B评估,并且仅在A和B都为假时才评估C ...

A AND B || C
Run Code Online (Sandbox Code Playgroud)

将永远评估B || C,因为||有一个更高的优先级AND(不是真的&&).

  • @Mikhail:是的.但是你必须要小心,因为单个`&`实际上是一个逐位运算符.所以`true&2`将是假的(因为`true`是'00000001`,'2`是'00000010`,所以`AND`将是'00000000`)... (9认同)