Php 为什么这个功能会失败?

Php 为什么这个功能会失败?,php,Php,我试图理解为什么这个函数不起作用。有人能告诉我发生了什么事吗 function API() { $seed = str_split(md5(rand(0000000,9999999))); $rand = array_rand($seed, 10); $convert = array_map(function($n){ global $seed; return $seed[$n]; }

我试图理解为什么这个函数不起作用。有人能告诉我发生了什么事吗

function API() {
        $seed = str_split(md5(rand(0000000,9999999)));
        $rand = array_rand($seed, 10);
        $convert = array_map(function($n){
            global $seed;
            return $seed[$n];
        },$rand);

        $var1 = implode('',$convert);

        $seed = str_split(md5(rand(0000000,9999999)));
        $rand = array_rand($seed, 10);
        $convert = array_map(function($n){
            global $seed;
            return $seed[$n];
        },$rand);

        $var2 = implode('',$convert);

        $seed = str_split(md5(rand(0000000,9999999)));
        $rand = array_rand($seed, 10);
        $convert = array_map(function($n){
            global $seed;
            return $seed[$n];
        },$rand);

        $var3 = implode('',$convert);
        $NewRecordLocatorID = $var1 . '-' . $var2 . '-' . $var3;
        return $NewRecordLocatorID;
}
此函数将仅返回
--

与仅仅在函数外回显值相比?这需要在课堂上吗

$seed = str_split(md5(rand(0000000,9999999)));
$rand = array_rand($seed, 10);
$convert = array_map(function($n){
    global $seed;
    return $seed[$n];
},$rand);

$var1 = implode('',$convert);

$seed = str_split(md5(rand(0000000,9999999)));
$rand = array_rand($seed, 10);
$convert = array_map(function($n){
    global $seed;
    return $seed[$n];
},$rand);

$var2 = implode('',$convert);

$seed = str_split(md5(rand(0000000,9999999)));
$rand = array_rand($seed, 10);
$convert = array_map(function($n){
    global $seed;
    return $seed[$n];
},$rand);

$var3 = implode('',$convert);
$NewRecordLocatorID = $var1 . '-' . $var2 . '-' . $var3;
echo $NewRecordLocatorID;

上述操作将返回所需的结果。

这是因为您如何调用
全局
。改变这些:

$convert = array_map(function($n){
    global $seed;
    return $seed[$n];
},$rand);
为此:

$convert = array_map(function($n) use ($seed){
    return $seed[$n];
},$rand);

瞧,它起作用了。

您正在尝试从全局范围获取变量

global $seed;
但是这个变量在函数
API
的局部范围内。 您必须像这里这样使用

$convert = array_map(function($n) use($seed){
    return $seed[$n];
},$rand);
或者:

$id = sprintf("%s-%s-%s", bin2hex(random_bytes(5)), bin2hex(random_bytes(5)), bin2hex(random_bytes(5)));


我假设您正在执行
echoapi()因为如果执行此操作,函数将生成一个结果