PHP有短路评估吗?给出以下代码:if (is_valid($string) && up_to_length($string) && file_exists($file)) {
......}如果is_valid($string)返回false,php解释器是否仍然检查以后的条件,比如up_to_length($string)?如果是这样,那么为什么它不需要做额外的工作呢?
3 回答
![?](http://img1.sycdn.imooc.com/5458692c00014e9b02200220-100-100.jpg)
哈士奇WWW
TA贡献1799条经验 获得超6个赞
是的,PHP解释器是“懒惰的”,这意味着它将进行最小数量的比较来评估条件。
如果您想验证,请尝试以下方法:
function saySomething(){ echo 'hi!'; return true;}if (false && saySomething()){ echo 'statement evaluated to true';}
![?](http://img1.sycdn.imooc.com/533e4c0500010c7602000200-100-100.jpg)
婷婷同学_
TA贡献1844条经验 获得超8个赞
是的,它确实。这是一个依赖于短路评估的小技巧。有时您可能会有一个小的if语句,您更愿意将其写成三元组,例如:
if ($confirmed) { $answer = 'Yes'; } else { $answer = 'No'; }
可以重写为:
$answer = $confirmed ? 'Yes' : 'No';
但是如果yes块也需要运行某些功能呢?
if ($confirmed) { do_something(); $answer = 'Yes'; } else { $answer = 'No'; }
那么,由于短路评估,仍然可以重写为三元组:
$answer = $confirmed && (do_something() || true) ? 'Yes' : 'No';
在这种情况下,表达式(do_something()|| true)不会改变三元组的整体结果,但确保三元条件保持不变true
,忽略了返回值do_something()
。
- 3 回答
- 0 关注
- 340 浏览
添加回答
举报
0/150
提交
取消