我有一个生成 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/