(PHP 8 >= 8.2.0)
随机\引擎::生成 — 生成随机性
返回随机性,并将算法的状态推进一步。
随机性由一个包含随机字节的二进制字符串表示。这种表示允许对算法生成的随机位进行明确的解释,例如为了适应不同算法使用的不同输出大小。
在整数上本地操作的算法应以小端字节序返回整数,例如通过利用 pack() 函数和 P
格式代码。由 随机\随机器 提供的高级接口,如果需要数值表示,将把返回的随机字节解释为无符号小端整数。
强烈建议返回字符串的每一位都是均匀且独立地选择的,因为某些应用程序需要基于位级的随机性才能正常工作。例如,线性同余生成器通常会为返回整数值的较低有效位生成较差的随机性,因此不适合需要位级随机性的应用程序。
此函数没有参数。
包含随机字节的非空字符串。
注意: 随机\随机器 在内部使用无符号 64 位整数。如果返回的字符串包含超过 64 位(8 字节)的随机性,则会忽略超出部分。其他应用程序可能能够一次处理超过 64 位的数据。
示例 #1 随机\引擎::生成() 示例
<?php
/**
* 实现一个模数为 65536、
* 乘数为 61、增量为 17 的线性同余生成器,返回一个 8 位整数。
*
* 注意:此引擎仅适用于演示目的。
* 线性同余生成器通常会生成质量较低的随机性,此特定实现具有
* 非常短的 16 位周期,不适合
* 几乎所有实际使用情况。
*/
final class LinearCongruentialGenerator implements \Random\Engine
{
private int $state;
public function __construct(?int $seed = null)
{
if ($seed === null) {
$seed = random_int(0, 0xffff);
}
$this->state = $seed & 0xffff;
}
public function generate(): string
{
$this->state = (61 * $this->state + 17) & 0xffff;
return pack('C', $this->state >> 8);
}
}
$r = new \Random\Randomizer(
new LinearCongruentialGenerator(seed: 1)
);
echo "幸运数字: ", $r->getInt(0, 99), "\n";
?>
上面的示例将输出
Lucky Number: 4