php - 如何调用自身内部的函数?

标签 php function codeigniter recursion

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

如果它不在使用中,它会返回 key ,否则,它会再次调用自身,但这会导致该函数执行无限循环,这是一个禁忌。这是整个函数:

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);
    }
}

再次调用该函数的正确方法是什么?

顺便说一下,我使用的是 CodeIgniter,因此是 $this

最佳答案

我不会在重试场景中使用递归函数(因为你不重用函数的结果,使用递归毫无意义)...它增加了很多不必要的开销。做这样的事情:

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

return $key;

如果您接近最大键数,这将导致很长的循环时间,因此您可能需要设置某种最大限制。

哦,如果这在多个线程上同时发生并且您正在检查数据库,则您应该实现表写锁定,这样同一个键就不会被插入两次。检查 key 是否可用的函数最好在同一事务中锁定检查,如果可用则写入以避免任何冲突。

关于php - 如何调用自身内部的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1612200/

相关文章:

php - 在 Woocommerce 中复制 Hook 函数时避免错误 500

javascript - 函数返回函数且无引用

php - Ajax 和 codeigniter 框架问题

http - 选择 HTTP 状态代码

php - 在 PHP 中创建基于边缘检测的图像

php - 连接外部Mysql数据库

c - 定义 C 函数数组

javascript - 表单标签过早关闭

PHP 的 inet_pton() 转换 IPv4 和 IPv6

php - url 编码的正斜杠破坏了我的 codeigniter 应用程序