关于PHP简单递归查询问题

末子
  • 63
public function randRateCode()
    {
        $rate = randpw(); //随机生成一个字符串
        $rs = $this->Agent->where("rate='".$rate."'")->find();
        //查询这个字符串在数据库中是否纯在
        if($rs){
            //如果存在
            $rate = $this->randRateCode();
        }
        return $rate;
    }

代码如上,我随机生成一个字符串,然后去数据库匹配,如果匹配到,则递归该方法,最后返回这个字符串

我的问题是

我最终return的值,是合法的(数据库不存在的)还是不合法的(数据库存在的),为什么!为什么!为什么!

我是这么理解的,最终 return 是合法的

因为当不合法的时候,return 保留执行(没有立即执行),当合法的时候,立即执行 return ,函数在return后立即终止,不会再去执行之前未执行的 return …

回复
阅读 2.3k
2 个回答

1.这种不需要用递归,用do-while就行
2.答案是合法的,但是你的理解是错误的

因为当不合法的时候,return 保留执行(没有立即执行),当合法的时候,立即执行 return ,函数在return后立即终止,不会再去执行之前未执行的 return …

return只会终止当前调用,不会终止父调用,所以return会一直执行

合法的啊, 会一层一层return回来

宣传栏