laravel 门面str的random函数代码的疑惑

发布于 2022-09-12 13:31:45 字数 1105 浏览 14 评论 0

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技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

橘寄 2022-09-19 13:31:45

你自己的方法,会存在一个极小概率事件,就是random_bytes()返回的内容刚好在base64_encode()编码之后,产生了至少编码后长度的25%以上的内容刚好是/+,然后结束后不是4的倍数,最多在加3个=补齐,然后 str_replace替换这三个字符为空之后,发现还小于$length.

虽然在随机里是个小概率事件,但是不代表不会发生.

奢望 2022-09-19 13:31:45

你把循环去掉了,如果字符串位数不够怎么补齐呢?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文