为了账号安全,请及时绑定邮箱和手机立即绑定

PHP有短路评估吗?

PHP有短路评估吗?

PHP
茅侃侃 2019-08-19 16:07:21
PHP有短路评估吗?给出以下代码:if (is_valid($string) && up_to_length($string) && file_exists($file)) {     ......}如果is_valid($string)返回false,php解释器是否仍然检查以后的条件,比如up_to_length($string)?如果是这样,那么为什么它不需要做额外的工作呢?
查看完整描述

3 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

是的,PHP解释器是“懒惰的”,这意味着它将进行最小数量的比较来评估条件。

如果您想验证,请尝试以下方法:

function saySomething(){
    echo 'hi!';
    return true;}if (false && saySomething()){
    echo 'statement evaluated to true';}


查看完整回答
反对 回复 2019-08-19
?
婷婷同学_

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()


查看完整回答
反对 回复 2019-08-19
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

不,如果不满足第一个条件,它不再检查其他条件。


查看完整回答
反对 回复 2019-08-19
  • 3 回答
  • 0 关注
  • 340 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信