嵌套的匿名函数

时间:2015-04-28 19:29:02

标签: php

我试图编写一些嵌套的PHP匿名函数,结构就是你在下面看到的结构,我的问题是:如何使它无错误地工作?

$abc = function($code){

    $function_A = function($code){
        return $code;
    };

    $function_B = function($code){
        global $function_A;
        $text = $function_A($code);
        return $text;
    };

    $function_B($code);

};

echo $abc('abc');

输出为致命错误:此行中的函数名称必须为字符串

$text = $function_A($code);

此消息对我没有任何意义:(

2 个答案:

答案 0 :(得分:10)

这里的问题是你的$function_A没有在全局范围内定义,而是在$abc的范围内。如果您愿意,可以尝试使用use$function_A传递到$function_B的范围:

$abc = function($code){

    $function_A = function($code){
        return $code;
    };

    $function_B = function($code) use ($function_A){
        $text = $function_A($code);
        return $text;
    };

    $function_B($code);

};

答案 1 :(得分:2)

在PHP中,要将除$this和superglobals之外的变量传递给匿名闭包,您必须使用use语句。

<?php

$abc = function($code){

    $function_A = function($code){
        return "Code: {$code}";
    };

    $function_B = function($code) use ($function_A) {
        $text = $function_A($code);
        return $text;
    };

    return $function_B($code);
};

echo $abc('abc');

以下是一个有效的例子:http://3v4l.org/u1CtZ