我编写了以下递归函数来循环查找结果,查找$result->pages->next
并调用curl获取下一页并聚合结果。最后,它将所有结果作为单个对象返回。
private function pager($result) {
static $all_results;
if(isset($result->pages->next) && !empty($result->pages->next)) {
$all_results[] = $this->get_curl_request($result->pages->next);
$this->pager(end($all_results));
} else {
return $all_results;
}
}
但是,我真的不喜欢使用static
,感觉执行不力,是技术债务的来源。有什么更优雅的方法呢?
更新
被召唤:
return $this->pager($this->get_curl_request("https://api/request/here"));
可以改变调用方式。
答案 0 :(得分:2)
尝试将$all_result
作为第二个参数添加为此行,并为此行添加返回值:$this->pager(end($all_results), $all_results);
<强>代码强>
private function pager($result, $all_results) {
if(isset($result->pages->next) && !empty($result->pages->next)) {
$all_results[] = $this->get_curl_request($result->pages->next);
return $this->pager(end($all_results), $all_results);
} else {
return $all_results;
}
}
上面的代码函数将返回最后更新的数组$all_results
。
使用示例:
$pager_array = $this->pager($result, array());