laravel 门面str的random函数代码的疑惑
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的代码的写法风格。应该对自己有些帮助
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
![扫码二维码加入Web技术交流群](/public/img/jiaqun_03.jpg)
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你自己的方法,会存在一个极小概率事件,就是
random_bytes()
返回的内容刚好在base64_encode()
编码之后,产生了至少编码后长度的25%以上的内容刚好是/+
,然后结束后不是4的倍数,最多在加3个=
补齐,然后str_replace
替换这三个字符为空之后,发现还小于$length
.虽然在随机里是个小概率事件,但是不代表不会发生.
你把循环去掉了,如果字符串位数不够怎么补齐呢?