0

我有这样的设置:

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();

在上面的示例中,他们回显了页面的内容,但我想返回它,任何帮助将不胜感激。谢谢!

4

2 回答 2

2

call_user_func怎么样?

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

echo test();

根据文档:

返回值

返回回调的返回值,错误时返回 FALSE。

延伸阅读

call_user_func 文档

编辑:

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

或者,您可以在等待请求完成时进行一些忙碌的等待。为此,将最外层范围内的变量设置为null. 获得后将此变量设置为请求的结果。设置完所有回调后,请继续检查变量中的其他内容null(在检查之间睡眠)。还设置错误回调以将此变量设置为类似的值false,以便程序在失败时可以退出循环。

于 2013-05-29T03:20:03.367 回答
1

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

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

    return $fn();
}

您的内部功能不会从外部功能中返回。

于 2013-05-29T03:16:27.390 回答