从匿名函数返回值到父函数

时间:2013-05-29 03:15:27

标签: php anonymous-function

我有这样的设置:

function test(){
    function(){
        return "testing!";
    };
    return;
}

echo test();

我正在尝试让test()函数返回“测试”(在此示例中),但这不起作用。你有什么建议吗?

为什么使用匿名函数? 我必须使用匿名函数,因为我正在使用ReactPHP的HttpClient,这是一个如何工作的基本示例:

$request = $client->request('GET', 'https://api.github.com/repos/reactphp/react/commits');
$request->on('response', function ($response) {
    $buffer = '';

    $response->on('data', function ($data) use (&$buffer) {
        $buffer .= $data;
        echo ".";
    });

    $response->on('end', function () use (&$buffer) {
        $decoded = json_decode($buffer, true);
        $latest = $decoded[0]['commit'];
        $author = $latest['author']['name'];
        $date = date('F j, Y', strtotime($latest['author']['date']));

        echo "\n";
        echo "Latest commit on react was done by {$author} on {$date}\n";
        echo "{$latest['message']}\n";
    });
});
$request->on('end', function ($error, $response) {
    echo $error;
});
$request->end();

在上面的示例中,它们会回显页面的内容,但我想将其返回,任何帮助都会 赞赏。谢谢!

2 个答案:

答案 0 :(得分:1)

你做不到。这不可能。您必须将值返回到外部函数,然后必须返回其自己的值:

function test(){
    $fn = function(){
        return "testing!";
    };

    return $fn();
}

您的内部函数无法返回外部函数。

答案 1 :(得分:1)

call_user_func 怎么样?

function test(){
    return call_user_func(function(){
        return "testing!";
    });
}

echo test();

根据文件:

  

返回值

     

返回回调的返回值,或者出错时返回FALSE。

进一步阅读

call_user_func documentation

编辑:

我建议您考虑使用不同的库来处理非异步的http请求。

或者,您可以在等待请求完成时等待忙碌。要做到这一点,最外层范围内的变量设置为null。获得后,将此变量设置为请求的结果。在您设置完所有回调之后,继续检查变量以查找除null之外的其他内容(sleep之间的检查)。还要设置错误回调,将此变量设置为false,以便程序在失败时退出循环。