可以帮忙优化一下这个函数嘛?

function get_superior_area($id,$level,$field='id'){
        $area = new \app\admin\model\Area;
        $result = $area->get($id);
        if($result['level'] > $level){
            return get_superior_area($result['pid'],$level,$field);
        }else{
            return $result[$field];
        }
    }

这是一个特定情况下回调自身的函数,每次回调都需要去new下,感觉会造成资源浪费,有什么办法能优化一下不要重复的去生成对象?

阅读 1.7k
3 个回答

依赖注入不就得了。

如果你只是想减少那一次 new 的操作,那只需要把 $area 设置成静态的,然后判断一下就可以。

function get_superior_area($id,$level,$field='id'){
    static $area;
    $area = $area ?? new \app\admin\model\Area;
    $result = $area->get($id);
    if($result['level'] > $level){
        return get_superior_area($result['pid'],$level,$field);
    }else{
        return $result[$field];
    }
}

from chatgpt:
这个函数的作用是根据给定的ID和级别,返回指定字段的上级区域的值。我建议你把函数改成这样:

function get_superior_area($id, $level, $field = 'id') {
    $area = new \app\admin\model\Area;
    $result = $area->get($id);
    while ($result['level'] > $level) {
        $result = $area->get($result['pid']);
    }
    return $result[$field];
}

这样的话,只需要一次查询就可以获取到所需的结果,更加高效。

推荐问题
宣传栏