Signatur
Beschreibung
Random\IntervalBoundary ist ein backed Enum (Typ string), das die vier möglichen Kombinationen von inklusiven und exklusiven Intervallgrenzen für Zufallszahlen beschreibt. Es wird in Verbindung mit Methoden wie Random\Randomizer::getFloat() verwendet, um präzise festzulegen, ob die untere und/oder obere Grenze zum möglichen Ergebnisbereich gehört.
Die vier Cases sind: ClosedOpen ([min, max)), ClosedClosed ([min, max]), OpenClosed ((min, max]) und OpenOpen ((min, max)). Eckige Klammern stehen für eine eingeschlossene (inklusive) Grenze, runde Klammern für eine ausgeschlossene (exklusive) Grenze.
Dieses Enum ermöglicht eine mathematisch exakte Steuerung des Zufallsbereichs – etwa wenn der Wert 0.0 oder 1.0 bei Wahrscheinlichkeitsberechnungen zwingend ausgeschlossen werden muss, um Division-by-Zero-Fehler oder ungültige Eingaben für logarithmische Funktionen zu vermeiden.
Beispiele
Zufalls-Float im halboffenen Intervall [0.0, 1.0)
<?php
$randomizer = new Random\Randomizer();
// Erzeugt einen Float im Intervall [0.0, 1.0):
// 0.0 ist möglich, 1.0 wird niemals zurückgegeben
$value = $randomizer->getFloat(
0.0,
1.0,
Random\IntervalBoundary::ClosedOpen
);
echo $value; // z. B. 0.7342918...
Logarithmus-Berechnung mit ausgeschlossenen Grenzen (offenes Intervall)
<?php
$randomizer = new Random\Randomizer();
// Für log() muss der Wert strikt positiv sein — 0.0 darf nicht vorkommen.
// Intervall (0.0, 1.0] schliesst 0.0 aus, lässt aber 1.0 zu.
$value = $randomizer->getFloat(
0.0,
1.0,
Random\IntervalBoundary::OpenClosed
);
// Sicher: $value ist niemals 0.0
$logValue = log($value);
echo $logValue; // z. B. -0.2345...
// Übersicht aller Cases:
foreach (Random\IntervalBoundary::cases() as $case) {
echo $case->name . ' => ' . $case->value . PHP_EOL;
}
// Wichtig · Fallstricke
Verfügbare Cases:
Random\IntervalBoundary::ClosedOpen—[min, max): untere Grenze inklusiv, obere exklusiv. Dies ist das Standardverhalten vieler Zufallsfunktionen.Random\IntervalBoundary::ClosedClosed—[min, max]: beide Grenzen inklusiv.Random\IntervalBoundary::OpenClosed—(min, max]: untere Grenze exklusiv, obere inklusiv.Random\IntervalBoundary::OpenOpen—(min, max): beide Grenzen exklusiv.
Da es sich um ein backed Enum handelt, ist der value jedes Cases ein String (identisch mit dem Case-Namen). Der Enum-Wert selbst hat keine besondere Bedeutung – er dient lediglich der Identifikation. Instanzen dieses Enums können über Random\IntervalBoundary::from('ClosedOpen') oder Random\IntervalBoundary::tryFrom('...') erzeugt werden.
Achtung: Bei OpenOpen muss min strikt kleiner als max sein und es muss mindestens ein darstellbarer Fließkommawert zwischen beiden Grenzen liegen, sonst wirft getFloat() eine \ValueError-Ausnahme.