PHP 8.3: Random extension: New \Random\Randomizer::getFloat() and nextFloat() methods
The Random extension in PHP 8.3 adds \Random\Randomizer::getFloat() and \Random\Randomizer::nextFloat() methods that generate a random float value.
There is also a new \Random\IntervalBoundary Enum that can be used as a parameter for the getFloat method to indicate whether the $min and $max boundaries should be inclusive or not.
\Random\Randomizer::getFloat() method
namespace Random;
class Randomizer {
// ...
public function getFloat(
float $min,
float $max,
\Random\IntervalBoundary $boundary = \Random\IntervalBoundary::ClosedOpen
): float {
}
}
-
$maxmust be larger than$minparameter. Otherwise a\ValueErrorexception will be thrown:ValueError: Random\Randomizer::getFloat(): Argument #2 ($max) must be greater than argument #1 ($min) -
$minand$maxmust be finite. PHP throws a\ValueErrorexception otherwise:ValueError: Random\Randomizer::getFloat(): Argument #1 ($min) must be finite
\Random\IntervalBoundary Enum
\Random\Randomizer::getFloat() method accepts a \Random\IntervalBoundary Enum as the third parameter to indicate whether $min and $max values must be inclusive or not.
enum IntervalBoundary {
case ClosedOpen;
case ClosedClosed;
case OpenClosed;
case OpenOpen;
}
IntervalBoundary::ClosedOpen:$minmay be returned,$maxmay not.IntervalBoundary::ClosedClosed:$minand$maxboth may be returned.IntervalBoundary::OpenClosed:$minmay not be returned,$maxmay.IntervalBoundary::OpenOpen: Neither$min, nor$maxmay be returned.
Usage Examples
Generate a random float between 0 < and < 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() method
The new \Random\Randomizer::nextFloat() method is functionally identical to \Random\Randomizer::getFloat(0, 1, \Random\IntervalBoundary::ClosedOpen).
JavaScript Math.random() is also similar to \Random\Randomizer::nextFloat(), as both of them return a random value in the range 0 <= and < 1.
namespace Random;
class Randomizer {
// ...
public function nextFloat(): float {
}
}
Usage Examples
Generate a random number in the range 0 <= and < 1:
$rng = new Random\Randomizer();
$rng->nextFloat(); // 0.21185336351144
Related Changes
- PHP 8.2: New
RandomExtension - PHP 8.3:
Randomextension: New\Random\Randomizer::getBytesFromStringmethod
Backwards Compatible Impact
\Random\Randomizer class is declared final, which means it cannot be extended. Unless a user-land \Random\IntervalBoundary class or an Enum is declared, this change should not cause any backwards compatibility issues.