laravel的代码:
use Illuminate\Support\Str;
/**
* Generate a more truly "random" alpha-numeric string.
* @param int $length
* @return string
*/
public static function random($length = 16)
{
$string = '';
while (($len = strlen($string)) < $length) {
$size = $length - $len;
$bytes = random_bytes($size);
$string .= substr(str_replace(['/', '+', '='], '', base64_encode($bytes)), 0, $size);
}
return $string;
}
这代码为什么要多创建两个变量 $len
和 $size
,假如像我下面这么写不应该更好一点吗
自己的代码:
function random($length = 16)
{
$string = '';
if($length > 0){
$bytes = random_bytes($length);
$string .= substr(str_replace(['/', '+', '='], '', base64_encode($bytes)), 0, $length);
}
return $string;
}
像我这样写不是少创建两个变量 $len
和 $size
和少使用了strlen()
方法。
laravel这样写更好吗?因为刚好用到了random方法,看了一下源代码。
laravel现在使用的人挺多的,像参考学习下laravel的代码的写法风格。应该对自己有些帮助
你自己的方法,会存在一个极小概率事件,就是
random_bytes()
返回的内容刚好在base64_encode()
编码之后,产生了至少编码后长度的25%以上的内容刚好是/+
,然后结束后不是4的倍数,最多在加3个=
补齐,然后str_replace
替换这三个字符为空之后,发现还小于$length
.虽然在随机里是个小概率事件,但是不代表不会发生.