【问题标题】:PHP 'else return' VS auto returnPHP 'else return' VS 自动返回
【发布时间】:2023-03-21 20:33:01
【问题描述】:

关于 PHP 函数,如果您不需要函数来返回 BOOLEAN 或 STRING,那么在条件失败时声明 return 与让函数自动返回有区别吗?

例如,

两者之间是否有任何内部差异:

function check() {
    if( 5 > $v ) {
        die('yes');
    }
}

function check() {
    if( 5 > $v ) {
        die('yes');
    }
    else {
        return;
    }
}

显然,它们似乎在“IF”条件失败时执行相同的操作,但在内部,出于内存、安全性、可用性或整体性的考虑,其中一个优于另一个最佳实践?

【问题讨论】:

    标签: php function return


    【解决方案1】:

    我更喜欢第一个。它的装配线更少,因此效率略高(二进制大小而不是速度)。无论函数中包含什么,所有函数都会在函数完成时定义一个返回地址,因此添加额外的 return 只会导致它添加额外的指令。

    我发现它更易读也更常见。

    【讨论】:

      【解决方案2】:

      这些语句在内存或安全性方面没有有效的现实差异。无,nada,zip,零。它们完全相同。保存额外操作码所需的几个字节无关紧要,如果您关心解析、标记和解释操作码所花费的时间,那么您就是在进行微优化

      在“可用性”方面,前者更清楚。从else 返回是。如果我在实时代码中看到这一点,我会假设编写它的人在这样做时分心并清理它。

      【讨论】:

      • 处理return 令牌到RET 指令可能会产生成本,而不是自动调用它。然而,这与您如何编写 PHP 无关。 :)
      • 任何关心优化 PHP 操作码的人都在寻找错误的树,除非他们无法优化。
      • 你怎么能肯定地说两者之间绝对没有区别。增加了预处理时间,增加了另一个逻辑分支。我不是 100% 确定 PHP 如何优化它的代码,但它仍然需要解析它。
      • 什么时候可以衡量性能差异? 10,000 次重复? 10万?它什么时候会真正产生差异?一百万?十?我们在这里谈论的是迂腐的微优化。
      • @Charles:我们在这里也讨论了非常普通的例子(或者我理解它们是这样的)。我不是要开始辩论,我只是好奇您如何将两者归类为相同的。
      【解决方案3】:

      我认为前者更容易读取,而后者只是增加了预处理器的开销(并且文件大小膨胀)。然而,它也清楚地表明该函数不会返回任何特定的东西(尽管函数名称或 cmets 可以比仅用于此目的的逻辑分支更容易做到这一点。

      我意识到并欣赏这些示例,但我会坚持简明扼要。

      [/恕我直言]

      【讨论】:

        【解决方案4】:

        在你的第二个示例中,return 什么都不做,而不是 增加解析器和编译器的工作让读者混淆它的规则是什么在代码中添加不必要的行并增加应用程序的大小,最终它没有任何价值!

        【讨论】:

          猜你喜欢
          • 2012-03-05
          • 1970-01-01
          • 2011-02-24
          • 2014-03-25
          • 1970-01-01
          • 2012-12-07
          • 1970-01-01
          • 2012-03-18
          • 2017-02-05
          相关资源
          最近更新 更多