猿问
下载APP

PHP有短路评估吗?

PHP有短路评估吗?

给出以下代码:

if (is_valid($string) && up_to_length($string) && file_exists($file)) {
    ......}

如果is_valid($string)返回false,php解释器是否仍然检查以后的条件,比如up_to_length($string)
如果是这样,那么为什么它不需要做额外的工作呢?


茅侃侃
浏览 33回答 3
3回答

哈士奇WWW

是的,PHP解释器是“懒惰的”,这意味着它将进行最小数量的比较来评估条件。如果您想验证,请尝试以下方法:function saySomething(){     echo 'hi!';     return true;}if (false && saySomething()){     echo 'statement evaluated to true';}

天天世纪

是的,它确实。这是一个依赖于短路评估的小技巧。有时您可能会有一个小的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()。

凤凰求蛊

不,如果不满足第一个条件,它不再检查其他条件。
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答