TIA求助。
我正在使用cURL调用外部REST API。通话工作正常 作为cURL选项的一部分,我使用CURLOPT_HEADERFUNCTION来解析响应头,如下所示:
curl_setopt($ch, CURLOPT_HEADERFUNCTION, "parseResponseHeaders");
功能如下:
function parseResponseHeaders($ch, $header_line ) {
if(preg_match("/Location/i", $header_line)){
$break_header = explode(": ", $header_line);
$build_new_string = $break_header[1].$string_from_outside_this_function;
}
return strlen($header_line);
}
我遇到的问题是" $ string_from_outside_this_function"变量返回为undefined。
我理解" parseResponseHeaders"回调接受2个参数。所以我无法传递外部变量 我假设外部变量不在范围内。但是,上面的代码包含在父函数(方法)中。 外部变量在父函数内的任何其他位置都可用。
不确定我做错了什么。
感谢。
答案 0 :(得分:2)
如果您的函数是匿名函数,则可以使用render
关键字将函数注入与函数体中定义函数的范围相同的范围。
它看起来像这样:
use
现在您的匿名函数已定义,您可以在$string_from_outside_this_function = 'Testing';
$parseResponseHeaders = function ($ch, $header_line) use ($string_from_outside_this_function) {
//Thanks to the "use" keyword, "Testing" has been injected as the value of
//$string_outside_this_function variable
if (preg_match("/Location/i", $header_line)) {
$break_header = explode(": ", $header_line);
$build_new_string = $break_header[1].$string_from_outside_this_function;
}
return strlen($header_line);
}
调用中传递它:
curl_setopt
这假定您的curl_setopt($ch, CURLOPT_HEADERFUNCTION, $parseResponseHeaders);
调用发生的地方有范围内的匿名函数变量。换句话说,您不能在一个范围内创建匿名函数,并在不同范围内调用curl_setopt
,并期望定义curl_setopt
。这基本上会让你回到原来在不同地方的范围界定问题。
这是PHP关于匿名函数的文档,其中包含$parseResponseHeaders
关键字:http://php.net/manual/en/functions.anonymous.php
重要的是要注意,命名函数不能使用use
关键字,只能使用匿名函数。这里有答案,供参考:Can non-anonymous functions in PHP using 'use' keyword?