PHP Conference Japan 2024

Random\Engine::generate

(PHP 8 >= 8.2.0)

Random\Engine::generate生成随机数

描述

public Random\Engine::generate(): string

返回随机数并使算法的状态前进一步。

随机数由包含随机字节的二进制字符串表示。此表示形式允许无歧义地解释算法生成的随机位,例如适应不同算法使用的不同输出大小。

在整数上原生操作的算法应以小端字节序返回整数,例如通过利用pack() 函数和P 格式代码。由Random\Randomizer 提供的高级接口,如果需要数值表示,则会将返回的随机字节解释为无符号小端整数。

强烈建议返回字符串的每一位都是均匀且独立选择的,因为某些应用程序需要基于位级别的随机性才能正常工作。例如,线性同余生成器通常为返回值的较低有效位生成较低质量的随机性,因此不适用于需要位级随机性的应用程序。

参数

此函数没有参数。

返回值

包含随机字节的非空字符串。

注意: Random\Randomizer 在内部使用 64 位无符号整数。如果返回的字符串包含超过 64 位(8 字节)的随机性,则将忽略超出部分的字节。其他应用程序可能能够一次处理超过 64 位的数据。

错误/异常

示例

示例 #1 Random\Engine::generate() 示例

<?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
"Lucky Number: ", $r->getInt(0, 99), "\n";
?>

以上示例将输出

Lucky Number: 4
添加注释

用户贡献注释

此页面没有用户贡献注释。
To Top