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

时间:2011-09-19 00:42:45

标签: php function

当我尝试这样做时:

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

a();
a();

我得到Cannot redeclare b... 当我试图这样做时:

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

a();
a();

我得到unexpected ), expected ... 如何在a返回时将该函数声明为本地函数并将其遗忘?我需要将函数传递给array_filter

4 个答案:

答案 0 :(得分:8)

您可以在array_filter来电中使用anonymous function

答案 1 :(得分:6)

“本地功能”的概念也被称为“功能内部功能”或“nested function”...... 线索在这个页面anonymous function,由@ceejayoz和@Nexerus引用,但是,让我们解释一下!

  1. 在PHP中仅存在函数声明的全局范围;
  2. 唯一的选择是使用另一种功能, anonymous
  3. 通过例子解释:

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

    2. 要在()范围内声明类似“a b()的函数”,唯一的选择是不使用b()而使用引用$b()。语法类似于function a(){ $b = function() { }; return $b(); }

    3. PS:在PHP中无法声明“静态引用”,匿名函数永远不会是 static

      另见:

答案 2 :(得分:3)

您可以尝试PHP具有的create_function函数。 http://php.net/create_function

$myfunc = create_function(..., ...);
array_filter(..., $myfunc(...));
unset($myfunc);

此方法不需要PHP 5.3 +

答案 3 :(得分:0)

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

检查以下示例:

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

a();
a();

或者通过检查功能是否已存在:

<?php
function a()
{
  if (!function_exists('b')) {
     function b() { }
  }
}

a();
a();