为什么mt_rand方法内部不起作用


Why doesn't mt_rand work insided of a method?

我正在研究 php 中的字符串随机化器方法。在方法之外,一切都正常发生。但是,在该方法内部,我收到以下错误:

Warning: mt_rand() [function.mt-rand]: max(0) is smaller than min(1) in /home/content/44/10902444/html/makepage.php on line 14

该方法的代码为:

function roll()
{
    $dir = "s/";
    for($i = 0; $i < 5; $i++)
    {
        $pick = mt_rand(1, strlen($validChars));
        $charPick = $validChars[$pick-1];
        $dir .= $charPick;
    }
    return $dir;
}

我是这样称呼它的:

$url = roll();
while(is_dir($url))
{
   $url = roll();
}

作为Java程序员,我知道我做错了什么。只是不是那是什么;)非常感谢任何帮助,并提前感谢任何回复的人!

编辑:我知道存在范围问题,因此我将$validChars声明移至该方法中。不过我仍然收到错误:

Parse error: syntax error, unexpected T_STRING in /home/content/44/10902444/html/makepage.php on line 20

变量$validChars在第一次运行 for 循环时未定义。因此$validChars变量的长度为 0。您有效地调用:

mt_rand(1, 0)

此函数调用会导致您发布的通知。

编辑:

此代码有效:

function roll($validChars)
{
            $dir = "s/";
            for($i = 0; $i < 5; $i++)
            {
                $pick = mt_rand(1, strlen($validChars));
                $charPick = $validChars[$pick-1];
                $dir .= $charPick;
            }
            return $dir;
}
$validChars = "abcdefghijklmnopqrstuvwxyz0123456789-_.";
echo roll($validChars);