laravel的Str::random

背景:

laravel的Str::random或许大家都不陌生,Str::random定义在src/Illuminate/Support/Str.php,但是你知道它都有哪些应用场景吗?

 

先来看看,Str::random的代码逻辑,不要被最外层的while骗了,实际上这个while只会执行一次

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

 

下面这一段是Str::random的核心,表面看似简单,实则需要细细探究:

很明显,下面这段代码的执行逻辑是,先执行base64_encode($bytes),再执行str_replace,最后执行substr

$string .= substr(str_replace(['/', '+', '='], '', base64_encode($bytes)), 0, $size);

 

laravel的Str::random,默认长度16,先通过random_bytes返回指定剩余长度的二进制,经过base64_encode编码$bytes,用空白替换掉编码后的/、+、=字符,最后,使用substr从0开始截取当前剩余长度的字符串进行拼接,这就是Str::random的工作原理。

posted @ 2022-04-28 16:21  jamstack  阅读(828)  评论(0编辑  收藏  举报