【问题标题】:PHP - Function inside a Function. Good or bad?PHP - 函数内的函数。是好是坏?
【发布时间】:2010-11-26 19:04:53
【问题描述】:

我想知道在 PHP 的另一个函数中定义一个函数是否是一件好事。就性能而言,在函数之前(而不是内部)定义它不是更好吗?

【问题讨论】:

    标签: php optimization memory function


    【解决方案1】:

    反对它的原因有很多:

    • 不会解析内部函数的文档。
    • 内部函数仅在外部函数被调用后才存在(但之后甚至超出了外部函数的范围)
    • 很难阅读(因为不常见)
    • 我能想到的唯一优势是定义回调,但最好使用 create_function() (<PHP 5.3) 或 closures (>=PHP5.3) 完成
    • 如果您担心此级别的性能,您确实应该使用另一种语言

    【讨论】:

    • +1。涵盖与所有其他答案放在一起的相同领域,并且简洁。
    【解决方案2】:

    这是一种不好的做法。不仅所有奇怪的事情都可能发生,并且您会在尝试调试它时浪费太多时间,而且代码也会变得更加混乱。

    就性能而言,我并不完全确定。我所知道的是,如果您在另一个函数中定义一个函数,那么最后一个函数只有在调用外部函数时才会存在。这可能会减轻一些记忆。但我相信回报并不显着。

    一种非常常见的方法是在函数外部定义函数并在内部调用。

    【讨论】:

      【解决方案3】:

      这取决于具体情况,因为它可能比使用create_function() 更可取。但是你应该知道在函数中创建的函数是全局的。

      function creator() {
      
          function inside() {
      
              echo "hi.";
          }
      }
      
      creator();
      inside();
      

      这将打印“嗨”。即使inside() 函数是在创建者函数的“内部”创建的。所以如果你的循环中有一个函数正在创建一个函数,你需要检查该函数是否存在,否则在第一次循环后会导致function exists错误。

      【讨论】:

        【解决方案4】:

        我认为您应该更关心可维护性,而不是性能,尤其是在这种情况下,两种解决方案之间的性能差异可能并不大,而可维护性的差异似乎很重要。

        就像 Donald Knuth 说的:

        我们应该忘记小 效率,说大约 97% 时间:过早优化是 万恶之源。

        这是完全正确的,在这种情况下;-)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-07-23
          • 2011-10-08
          • 2010-10-03
          • 2012-04-23
          • 1970-01-01
          • 2011-02-20
          • 2010-10-15
          • 2013-01-11
          相关资源
          最近更新 更多