我如何让这个函数在 PHP 中运行一次?

Tha*_*e22 1 php

我试图让随机函数运行一次,以便每个用户都有 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)

She*_*rif 6

静态变量的状态只存在于单个请求的范围内。您的建议是您希望保留每个用户的状态,而不是每个请求。为此,您需要在 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()在函数内部进行操作可能不太现实。所以请考虑这只是一个人为的例子。