簡體   English   中英

帶有匿名函數和閉包的cURL WRITEFUNCTION回調

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM