代码之家  ›  专栏  ›  技术社区  ›  Shoaib Nawaz

在单个语句中创建和调用匿名函数

  •  18
  • Shoaib Nawaz  · 技术社区  · 14 年前

    php闭包或匿名函数用于创建函数而不指定其名称。

    有没有可能像在JavaScript中那样,在不指定标识符的情况下调用它们? 例如

    (function(){
        echo('anonymous function');
    })();
    

    正确的用法是什么 use

    $anon_func = 
    function($my_param) use($this->object_property){ //use of $this is erroneous here
        echo('anonymous function');
    };
    
    4 回复  |  直到 12 年前
        1
  •  11
  •   NullUserException Mark Roddy    8 年前

    分配给标识符

    不是在PHP5.x中;除非在方法将回调作为参数时计算它。如:

    $square = array_map(function ($v) { return $v*$v; }, $array);
    

    定义匿名时构造 功能

    这个 use 关键字指示应将当前词汇作用域中的哪些变量导入闭包。您甚至可以通过引用传递它们,并更改正在传递的变量,例如:

    $total = 0;
    array_walk($array, function ($v) use (&$total) { $total += $v; });
    // $total is now the sum of elements in $array
    

    匿名者的状况如何 公共方法中的函数

    $this 通过关键字 使用 在里面 PHP 5.4 :

    // this works fine in PHP 5.4
    $anon_func = 
    function($my_param) { 
        $thing = $my_param + $this->object_property;
        echo('anonymous function');
    };
    

    注意,出于某种奇怪的原因 $这个 封闭式 was removed in PHP 5.3 . 在此版本中,您可以使用以下方法绕过此限制:

    // a workaround for PHP 5.3
    $temp = $this;
    
    $anon_func = 
    function($my_param) use ($temp) { 
        $thing = $my_param + $temp->object_property;
        echo('anonymous function');
    };
    

    但这只允许您访问公共成员,尝试访问私有成员仍会导致错误。

    还请注意,尝试导入 $这个 使用 Cannot use $this as lexical variable .

        2
  •  22
  •   jbafford    8 年前

    此代码:

    (function() { echo "This works as expected in PHP 7.\n"; })();
    

        3
  •  20
  •   steampowered Brijesh Verma    13 年前
    call_user_func(function() use(closure-vars){ ... });
    
        4
  •  3
  •   Marc B    14 年前

    function() {} unexpected '(' 语法错误。这个 doc page 关于闭包也没有提到。

    也许一旦他们修补解析器允许 somefunction()[2] 数组解引用。