我有这样的设置:
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();
在上面的示例中,它们会回显页面的内容,但我想将其返回,任何帮助都会 赞赏。谢谢!
答案 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。
我建议您考虑使用不同的库来处理非异步的http请求。
或者,您可以在等待请求完成时等待忙碌。要做到这一点,最外层范围内的变量设置为null
。获得后,将此变量设置为请求的结果。在您设置完所有回调之后,继续检查变量以查找除null
之外的其他内容(sleep之间的检查)。还要设置错误回调,将此变量设置为false
,以便程序在失败时退出循环。