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.21185336351144
ValueError: Random\Randomizer::getFloat(): Argument #1 ($min) must be finite
ValueError: Random\Randomizer::getFloat(): Argument #2 ($max) must be greater than argument #1 ($min)