PHP - 函数内部的函数。是好是坏?

时间:2009-09-09 10:24:04

标签: php optimization memory function

我想知道在PHP中的另一个函数中定义函数是否是一件好事。在功能方面(而不是在内部)在性能方面定义它不是更好。

4 个答案:

答案 0 :(得分:22)

我认为你应该更关心可维护性,而不是更多关于性能,特别是在那种情况下,两种解决方案之间的性能差异可能不是那么大,而可维护性的差异似乎很重要。

像唐纳德克努特说的那样:

  

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

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

答案 1 :(得分:11)

反对它有多种原因:

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

答案 2 :(得分:7)

这是一种不好的做法。不仅所有奇怪的事情都会发生,你将失去太多的时间来尝试调试它,而且代码变得更加混乱。

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

一种非常常见的方法是在该函数之外定义函数并在其中调用它。

答案 3 :(得分:6)

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

function creator() {

    function inside() {

        echo "hi.";
    }
}

creator();
inside();

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