我试图理解为什么这个功能不起作用。有人会教我发生了什么吗?
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
,这是期望的结果。
答案 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