php中的递归函数存储结果而不使用静态

时间:2014-06-18 00:24:11

标签: php recursion static

我编写了以下递归函数来循环查找结果,查找$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"));

可以改变调用方式。

1 个答案:

答案 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());