#php #recursion #static
#php #рекурсия #статический
Вопрос:
Я написал следующую рекурсивную функцию, чтобы продолжать перебирать результат, ища $result->pages->next
и вызывая curl, извлекающий следующую страницу и агрегирующий результаты. Наконец, она возвращает все результаты как один объект.
private function pager($result) {
static $all_results;
if(isset($result->pages->next) amp;amp; !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"));
Откройте для изменения способа ее вызова.
Комментарии:
1. Можете ли вы предоставить информацию о том, где / как
->pager()
вызывается (первый вызов)?
Ответ №1:
Попробуйте ввести $all_result
в качестве второго параметра, подобного этому, и добавить возврат для этой строки: $this->pager(end($all_results), $all_results);
Код
private function pager($result, $all_results) {
if(isset($result->pages->next) amp;amp; !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());