Рекурсивная функция в php, хранящая результаты без использования статики

#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());