我试图让随机函数运行一次,以便每个用户都有 1 个唯一的字符串。
我不明白为什么它不起作用。我使用了静态变量,但它仍然运行不止一次。
有什么建议 ?
谢谢你。
//
function RandomStr($length = 10)
{
static $state = false;
if ($state) return;
$state = true;
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
echo RandomStr();
//
Run Code Online (Sandbox Code Playgroud)
静态变量的状态只存在于单个请求的范围内。您的建议是您希望保留每个用户的状态,而不是每个请求。为此,您需要在 PHP 之外维护状态,例如在您的数据库或会话中(如果您想保留每个会话的状态)。
例如
function RandomStr($length = 10)
{
session_start();
$state = $_SESSION['state'] ?? false;
if ($state) return;
$_SESSION['state'] = true;
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
Run Code Online (Sandbox Code Playgroud)
当然,请注意session_start()在函数内部进行操作可能不太现实。所以请考虑这只是一个人为的例子。