CURLOPT_HEADERFUNCTION的范围是什么?

时间:2017-04-19 00:16:04

标签: php rest curl

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个参数。所以我无法传递外部变量 我假设外部变量不在范围内。但是,上面的代码包含在父函数(方法)中。 外部变量在父函数内的任何其他位置都可用。

不确定我做错了什么。

感谢。

1 个答案:

答案 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?