Я знаю, что это старый вопрос, но, возможно, мой ответ поможет вам или кому-то еще. Попробуйте это:
function get_write_function(){
return function($curl, $data){
return strlen($data);
}
}
Я не знаю точно, что вы хотите сделать, но с PHP 5.3 вы можете многое сделать с помощью обратного вызова. Что действительно хорошо в генерации функции таким образом, так это то, что значения, переданные через ключевое слово «use», остаются с функцией впоследствии, вроде констант.
function get_write_function($var){
$obj = $this;//access variables or functions within your class with the object variable
return function($curl, $data) use ($var, $obj) {
$len = strlen($data);
//just an example - you can come up with something better than this:
if ($len > $var){
return -1;//abort the download
} else {
$obj->do_something();//call a class function
return $len;
}
}
}
Вы можете извлечь функцию как переменную следующим образом:
function download($link){
......
$var = 5000;
$write_function = $this->get_write_function($var);
$ch = curl_init($link);
curl_setopt($ch, CURLOPT_FILE, $File->handle);
curl_setopt($ch, CURLOPT_WRITEFUNCTION , $write_function);
curl_exec($ch);
curl_close($ch);
$File->close();
......
}
Это был просто пример. Вы можете увидеть, как я использовал это здесь: Параллельный запрос cURL с обратным вызовом WRITEFUNCTION . На самом деле я не тестировал весь этот код, поэтому возможны незначительные ошибки. Дайте мне знать, если у вас возникнут проблемы, и я это исправлю.