Em sending_requests, não vi motivo para existir a função poolResponseHandler. Afinal, vc cria uma instância de stdClass e fica passando ela para as outras funções, que setam o campo response que só é usado dentro das funções. Como o response (e nenhuma outra informação da classe) é usada fora dela, e ele sempre é sobrescrito toda vez que uma requisição é feita, acaba ficando meio que sem função.
Ou seja, poderia ser feito sem esse objeto:
function send_reqs(CurlHandle $handler): void {
for ($i = 1; $i <= 10; $i++) {
curl_setopt($handler, CURLOPT_URL, REQUEST_URL.REQUEST_ROUTE."/$i");
curl_setopt($handler, CURLOPT_RETURNTRANSFER, true);
// response só é usado dentro da função, então não precisa do poolResponseHandler
$response = curl_exec($handler);
if($response == false) {
pprint_err_msg("Failed to make request at given url ".REQUEST_URL. "/$i");
}
$data = json_decode($response, true);
pprint_reqs($data);
sleep(WAIT_TIME);
}
}
function send_req(CurlHandle $handler): void {
curl_setopt($handler, CURLOPT_URL, REQUEST_URL.REQUEST_ROUTE."/1");
curl_setopt($handler, CURLOPT_RETURNTRANSFER, true);
// response só é usado dentro da função, então não precisa do poolResponseHandler
$response = curl_exec($handler);
if($response == false) {
pprint_err_msg("Failed to make request at given url ".REQUEST_URL);
}
printf("%s\n", $response);
}
function main(): int {
$curl = curl_init();
send_reqs($curl);
send_req($curl);
curl_close($curl);
return 0;
}
Em download_files até faz sentido porque em uma função vc seta um dos campos do objeto, que depois é usado em outra função. Mas no caso acima, da forma que está, não vejo necessidade do poolResponseHandler.
Se quiser enviar muitas requisições de uma vez, outra opção é usar curl_multi_init e as demais funções curl_multi_*, que roda as requisições em paralelo.