为函数添加额外的自定义参数


PHP CURLOPT_PROGRESSFUNCTION add extra custom parameter to function

我想知道是否可以在使用

时为调用的函数添加自定义参数
curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, array($this, 'progressFunction'));

所以函数签名看起来像

private function progressFunction($clientp, $dltotal, $dlnow, $ultotal, $ulnow, $myCustomParameter) { }

代替

private function progressFunction($clientp, $dltotal, $dlnow, $ultotal, $ulnow) { }

谢谢。

好的,这是一个严格的建议,我会把它作为一个答案,因为我认为它可能工作;

Php支持匿名函数,所以你可以这样传递它:

curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, function ($clientp, $dltotal, $dlnow, $ultotal, $ulnow) {
});

现在的技巧是使用use传递参数,因此:

curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, function (...) use ($myCustomParameter) {
    // Your code
    });

在PHP类中,您可以将额外的参数(如$statusName)传递给另一个函数,如下所示:

curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, function ($resource, $downloadSize, $downloaded, $uploadSize, $uploaded) use ($statusName) {
    $this->progress($resource, $downloadSize, $downloaded, $uploadSize, $uploaded, $statusName);
});

那么你的专用进度函数不会比它更丑陋的代码:

private function progress($resource, $downloadSize, $downloaded, $uploadSize, $uploaded, $statusName="curl_download_status")
{
    // emit the progress    
    Cache::put($statusName, [
        'resource' => $resource,
        'download_size' => $downloadSize,
        'downloaded' => $downloaded,
        'upload_size' => $uploadSize,
        'uploaded' => $uploaded
    ], 10);
}