PHP 8.3 :Random 扩展 - 新增 \Random\Randomizer::getFloat() 和 nextFloat() 方法
PHP 8.3 中 Random 扩展中新增了 \Random\Randomizer::getFloat() 和 \Random\Randomizer::nextFloat() 方法,生成随机浮点值。
同时也新增了一个 \Random\IntervalBoundary 枚举,可用作 getFloat 方法的参数,用以说明是否应该限制最小值 $min 和最大值 $max。
\Random\Randomizer::getFloat() 方法
namespace Random;
class Randomizer {
    // ...
    public function getFloat(
        float $min,
        float $max,
        \Random\IntervalBoundary $boundary = \Random\IntervalBoundary::ClosedOpen
    ): float {
    }
}$max 参数值必须大于 $min。否则会抛出 \ValueError 异常:$min and $max must be finite。
\Random\IntervalBoundary 枚举
\Random\Randomizer::getFloat() 方法接收 \Random\IntervalBoundary 枚举作为第三个参数,用来说明是否应该包含 $min 和 $max 值。
enum IntervalBoundary {
    case ClosedOpen;
    case ClosedClosed;
    case OpenClosed;
    case OpenOpen;
}- IntervalBoundary::ClosedOpen: 必须放回- $min,可以不返回- $mim。
- IntervalBoundary::ClosedClosed:必须同时返回- $min和- $max。
- IntervalBoundary::OpenClosed: 可以不返回- $min,必须返回- $max。
- IntervalBoundary::OpenOpen:- $min或者- $max都不返回
用例
生成 0 到 10 之间的随机浮点数。
$rng = new Random\Randomizer();
$rng->getFloat(0, 10, \Random\IntervalBoundary::OpenOpen); // 9.3835746900717
$rng->getFloat(0, 10, \Random\IntervalBoundary::OpenOpen); // 3.065611591453
***
Generate a random `float` between `42 <=` and `< 43`.
```php
$rng = new Random\Randomizer();
// IntervalBoundary::ClosedOpen is the default $boundary parameter value.
$rng->getFloat(42, 43); // 42.777167603068
$rng->getFloat(42, 43); // 42.565307732356\Random\Randomizer::nextFloat() 方法
新增的 \Random\Randomizer::nextFloat() 方法功能上和 \Random\Randomizer::getFloat(0, 1, \Random\IntervalBoundary::ClosedOpen) 完全相同。
JavaScript 的 Math.random() 也类似于 \Random\Randomizer::nextFloat(),它们都返回一个 0 到 1 之间的随机数。
namespace Random;
class Randomizer {
    // ...
    public function nextFloat(): float {
    }
}用例
生成 0 到 1 之间的随机数:
$rng = new Random\Randomizer();
$rng->nextFloat(); // 0.21185336351144ValueError: Random\Randomizer::getFloat(): Argument #1 ($min) must be finiteValueError: Random\Randomizer::getFloat(): Argument #2 ($max) must be greater than argument #1 ($min)
