[英]cURL WRITEFUNCTION callback with anonymous function and closures
我正在使用CURLOPT_WRITEFUNCTION的 cURL選項指定一個回調來處理來自cURL請求的數據。
$serverid=5;
$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.whatever.com');
curl_setopt(
$ch,
CURLOPT_WRITEFUNCTION,
function ($ch, $string) {
return readCallback($ch, $string, $serverid);
}
);
curl_exec($ch);
function readCallback($ch, $string, $serverid) {
echo "Server #", $serverid, " | ", $string;
return strlen($string);
}
我想使用一個匿名函數來調用我自己的函數,該函數確實有效( readCallback()
),這樣我就可以包含與請求相關聯的服務器ID( $serverid
)。 我怎樣才能正確利用閉包,以便當cURL命中我的回調匿名函數時,匿名函數知道它最初是用$serverid=5
定義並且可以適當地調用readCallback()
?
我最終將使用ParalellCur l和一個常見的回調函數,這就是為什么有一個匿名函數需要使用ID調用我的回調。
如果您希望在匿名函數中訪問$ serverid,則必須告訴PHP您要使用該變量。 像這樣:
/*
* I replaced the simple $serverid var to $serverIdHolder because
* 'use' passes the variable by value, so it won't change inside
* your anonymous function that way. But if you pass a reference
* to an object, then you are able to see always the current needed value.
*/
$serverIdHolder = new stdClass;
$serverIdHolder->id = 5;
$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.whatever.com');
curl_setopt(
$ch,
CURLOPT_WRITEFUNCTION,
function ($ch, $string) use ($serverIdHolder) {
return readCallback($ch, $string, $serverIdHolder->id);
}
);
curl_exec($ch);
function readCallback($ch, $string, $serverid) {
echo "Server #", $serverid, " | ", $string;
return strlen($string);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.