LOADING

php递归踩得坑

public function headingCode()

{
    list($msec, $sec) = explode(' ', microtime());
    $msectime = (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
    $msectime = substr(str_shuffle($msectime), -6);
    $banji    = Table::where('heading_code', $msectime)->first();
    if($banji) {
       $this->headingCode();
    }
    return $msectime;

}

这是一个递归算法能随机6位数,并且去数据库中查询是否已有,没有的话就返回
但是这里有个问题, 就是递归时实际上第一个方法的变量还在内存中没有销毁,第二次进来的时候虽然变量都叫一个名字,但是内存中分配的是不同的空间进行存储,所以随后会出现只返回第一次的$msectime,解决方法如下

public function headingCode()

{
    list($msec, $sec) = explode(' ', microtime());
    $msectime = (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
    $msectime = substr(str_shuffle($msectime), -6);
    $banji    = Banji::where('heading_code', $msectime)->first();
    if($banji) {
        $msectime = $this->headingCode();
    }
    return $msectime;

}

标签: PHP

添加新评论