如何在PHP中定义本地函数?

如何在PHP中定义本地函数?,php,function,Php,Function,当我尝试这样做时: function a() { function b() { } } a(); a(); function a() { if(!isset(b)) function b() { } } a(); a(); 我得到无法重新申报b.. 当我尝试这样做时: function a() { function b() { } } a(); a(); function a() { if(!isset(b)) func

当我尝试这样做时:

function a()
{
    function b() { }
}

a();
a();
function a()
{
    if(!isset(b))
        function b() { }
}

a();
a();
我得到
无法重新申报b..

当我尝试这样做时:

function a()
{
    function b() { }
}

a();
a();
function a()
{
    if(!isset(b))
        function b() { }
}

a();
a();
我得到
意外的),预期的…


a
返回时,如何将函数声明为本地函数并将其遗忘?我需要函数将其传递给
array\u filter

您可以尝试PHP提供的
create\u函数。

此方法不需要PHP5.3+

您可以在
数组中使用过滤器调用。

本地函数的概念也被命名为“函数内部函数”或“。。。 线索就在这一页上,@ceejayoz和@Nexerus引用过,但是,让我们解释一下

  • 在PHP中,只存在函数声明的全局范围
  • 唯一的选择是使用另一种函数,匿名函数
  • 举例说明:

  • 函数a(){function b(){}return b();}
    中的函数
    b()
    也是全局函数,因此声明与
    函数a(){return b();}函数b(){}
    具有相同的效果

  • 要声明类似“a()范围内的函数b()”的内容,唯一的替代方法是使用引用而不是
    b()
    。语法类似于
    function a(){$b=function(){};return$b();}

  • PS:在PHP中不可能声明“静态引用”,匿名函数永远不会是静态的

    另见:

    • ()

    您可以在PHP中定义本地函数,但只能声明一次。这可以通过定义和比较静态变量来实现

    检查以下示例:

    <?php
    function a()
    {
      static $init = true;
      if ($init) {
        function b() { }
        $init = FALSE;
      }
    }
    
    a();
    a();
    

    嵌套函数要求一个世界的伤害。您使用的是什么版本的PHP?@Mark Elliot:产生这些错误的版本是
    PHP版本5.3.2-1ubuntu4.2
    ,但这必须在
    PHP版本5.3.6
    上运行,您的意思是“if(!function_exists('b')”而不是“if(!isset(b))?如果(!function_存在('b')){function b(){}}应该可以工作。