PHP 8.2+ 推荐使用 Random\Randomizer 类配合 Xoshiro256StarStar 等现代引擎生成高质量、可复现、线程安全的随机数,取代 rand() 和 mt_rand();支持 getInt、getFloat、shuffleArray 等方法,指定种子可复现序列,安全场景仍用 random_int() 和 random_bytes(),并新增 jump() 实现多路独立随机流。

PHP 8.2+ 中推荐使用 Random\Randomizer 类配合现代随机引擎(如 Xoshiro256StarStar)来生成高质量、可复现、线程安全的随机数。它取代了过去零散调用 rand() 或 mt_rand() 的方式,结构更清晰、扩展性更强,也更符合密码学安全实践(当搭配 random_int() 等底层 CSPRNG 时)。
基础用法:Randomizer + 默认引擎
最简单的方式是直接实例化 Random\Randomizer,它会自动选择系统推荐的加密安全引擎:
$r = new Random\Randomizer();- 生成整数:
$r->getInt(1, 100)→ 返回闭区间 [1, 100] 内的随机整数 - 生成浮点数:
$r->getFloat(0.0, 1.0)→ 返回 [0.0, 1.0) 区间的浮点数 - 打乱数组:
$shuffled = $r->shuffleArray([1, 2, 3, 4, 5]); - 随机选键:
$key = $r->arrayKey(['a' => 'x', 'b' => 'y']);
指定引擎与种子:可控复现的随机序列
若需调试、测试或分布式场景下保证相同输入产生相同输出,可显式指定引擎并传入种子:
- 使用
Xoshiro256StarStar(PHP 8.2+ 默认高性能引擎):$engine = new Random\Engine\Xoshiro256StarStar(12345); - 绑定到 Randomizer:
$r = new Random\Randomizer($engine); - 此后所有
getInt()、shuffleArray()等调用都基于该确定性种子 - 注意:种子为整数,不同种子产生完全不同的序列;相同种子在相同 PHP 版本下结果一致
安全敏感场景:仍用 random_int() 和 random_bytes()
Randomizer 本身不直接提供加密级字节生成,但底层默认调用的是系统级 CSPRNG(如 getrandom()、CryptGenRandom)。对于密钥、令牌、salt 等高安全需求,应继续使用原生函数:
立即学习“PHP免费学习笔记(深入)”;
- 安全整数:
random_int(1000, 9999)(返回闭区间,抛出ValueError或Random\RandomException) - 安全字节:
random_bytes(16)(返回 16 字节二进制字符串,常用于 token 或 IV) - 二者在 PHP 8.2+ 中失败时统一抛出
Random\RandomException,便于集中捕获
高级控制:jump 实现多路独立随机流
PHP 8.2+ 引入 jump() 方法,适用于并发或 Fiber 场景,让多个随机器从同一种子出发,生成互不重叠的长序列:
- 创建蓝图引擎:
$blueprint = new Random\Engine\Xoshiro256StarStar(0); - 克隆并跳转:
$rng1 = clone $blueprint; $blueprint->jump(); $rng2 = clone $blueprint; - 每个克隆引擎生成的序列彼此隔离,适合协程、Fiber 或并行任务中避免状态干扰
- 典型用途:游戏服务器为每个玩家会话分配独立且不冲突的随机流



















