Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么';在一种方法的内部工作吗?_Php - Fatal编程技术网

Php 为什么';在一种方法的内部工作吗?

Php 为什么';在一种方法的内部工作吗?,php,Php,我正在研究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;

我正在研究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;
}
作为Java程序员,我知道我做错了什么。只是不是那样;)非常感谢您提供的任何帮助,并提前向任何回应您的人表示感谢

EDIT:我知道存在范围问题,因此我将
$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);   
功能滚动($validChars)
{
$dir=“s/”;
对于($i=0;$i<5;$i++)
{
$pick=mt_rand(1,strlen($validChars));
$charPick=$validChars[$pick-1];
$dir.=$charPick;
}
返回$dir;
}
$validChars=“abcdefghijklmnopqrstuvxyz012456789-”;
回音辊($validChars);

您不了解消息的哪一部分?函数中的$validChars在哪里初始化?它是空的?您有一个范围问题,请参见方法之外的它是$validChars=“abcdefghijklmnopqrstuvwxyz012456789-”;然后您需要
global$validChars不是这样工作的。您可以通过在
roll
函数的定义中添加一个名为
$validChars
的新参数来解决此问题。好的,我使用了您的fix MartyIX,但我这样调用它时出现了一个错误:$url roll($validChars);
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);