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

Roc*_*och 18 php memory optimization function

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

Pas*_*TIN 23

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

像唐纳德克努特说:

我们应该忘记小的效率,大约97%的时间说:过早的优化是所有邪恶的根源.

这种情况确实如此;-)


sou*_*rge 12

反对它的原因有很多:

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


rog*_*pvl 7

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

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

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


nul*_*ull 6

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

function creator() {

    function inside() {

        echo "hi.";
    }
}

creator();
inside();
Run Code Online (Sandbox Code Playgroud)

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