为什么这个功能会失败?

时间:2017-01-10 20:24:29

标签: 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];
        },$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;
}

此功能仅返回--

Versus只是回显函数外的值?这需要在课堂上吗?

$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;

以上将返回1d0f09fd36-1e656c979d-3468a68fea,这是期望的结果。

3 个答案:

答案 0 :(得分:6)

这是因为你打电话给global。改变这些:

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

对此:

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

瞧,它有效。

答案 1 :(得分:2)

您正试图从全局范围获取变量。

global $seed;

但是这个变量在函数API的局部范围内。 您必须使用此处的use

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

答案 2 :(得分:2)

或者改为:

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

http://php.net/manual/en/function.random-bytes.php
https://github.com/paragonie/random_compat