如何在自己内部调用函数?

reb*_*ion 8 php recursion codeigniter function

我有一个函数生成一个4个字符的键,每次都必须是唯一的.为此,该函数首先生成一个密钥,然后检查数据库表以查看其他人是否正在使用它.

如果它没有被使用,它会返回键,否则,它会再次调用自身,但是这会导致函数执行无限循环,这是一个禁忌.这是整个功能:

function key_generator($length = 4)
{
    // I've subsequently left out the generating code,
    // which is not necesarry in this case

    $key = 'xxxx';

    if ($this->user_model->valid_key($key) == true)
    {
        return $key;
    }
    else
    {
        $this->key_generator(4);
    }
}
Run Code Online (Sandbox Code Playgroud)

重新调用该函数的正确方法是什么?

顺便说一下,我正在使用CodeIgniter $this.

Bli*_*ixt 25

我不会将recursive函数用于重试场景(因为你没有重用函数的结果,使用递归是没有意义的)......它增加了很多不必要的开销.做这样的事情:

do {
    $key = ...; // Generate your key here...
} while (!$this->user_model->valid_key($key));

return $key;
Run Code Online (Sandbox Code Playgroud)

如果您接近最大键数,这将导致非常长的循环时间,因此您可能希望设置某种最大限制.

哦,如果同时在多个线程上发生并且您正在检查数据库,则应该实现表写锁定,以便不能插入相同的键两次.优选地,检查密钥是否可用的功能应该锁定,检查并且如果可用则写入相同的事务以避免任何冲突.


dre*_*ewm 5

您需要返回自我调用的结果,否则一旦递归,将无法返回有效密钥.

return $this->key_generator($length);
Run Code Online (Sandbox Code Playgroud)