我想知道是否可以在使用
时为调用的函数添加自定义参数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);
}