Signatur
Beschreibung
Random\RandomError ist die Basisklasse aller Error-Klassen im Random-Namespace. Sie erbt direkt von \Error und wird geworfen, wenn grundlegende, nicht behebbare Fehler bei der Arbeit mit Zufallszahlengeneratoren auftreten – beispielsweise wenn ein Engine in einem ungültigen Zustand verwendet wird oder der Zufall-Pool des Systems erschöpft ist.
Die Klasse dient in erster Linie als gemeinsamer Basistyp, sodass Anwendungen mit einem einzigen catch(Random\RandomError $e)-Block alle zufallsbezogenen Fehler abfangen können, ohne jede konkrete Unterklasse einzeln behandeln zu müssen.
Konkrete Unterklassen sind z. B. Random\BrokenRandomEngineError, die geworfen wird, wenn ein Random\Engine dauerhaft defekte Daten liefert. Durch die Vererbungshierarchie lassen sich spezifische Fehlertypen gezielt oder pauschal behandeln.
Da Random\RandomError von \Error (und nicht von \Exception) erbt, sollte sie grundsätzlich nur dann abgefangen werden, wenn eine sinnvolle Fehlerbehandlung möglich ist – andernfalls empfiehlt es sich, den Fehler propagieren zu lassen.
Beispiele
Alle zufallsbezogenen Fehler pauschal abfangen
<?php
use Random\Engine\Xoshiro256StarStar;
use Random\Randomizer;
use Random\RandomError;
try {
$engine = new Xoshiro256StarStar();
$randomizer = new Randomizer($engine);
// Normale Nutzung
echo $randomizer->getInt(1, 100) . PHP_EOL;
} catch (RandomError $e) {
// Fängt Random\RandomError und alle Unterklassen
echo 'Zufallsfehler: ' . $e->getMessage() . PHP_EOL;
}
Unterschiedliche Fehlertypen gezielt behandeln
<?php
use Random\BrokenRandomEngineError;
use Random\RandomError;
use Random\Randomizer;
/**
* Ein absichtlich kaputtes Engine, das immer Null-Bytes liefert.
*/
class BrokenEngine implements Random\Engine
{
public function generate(): string
{
return str_repeat("\x00", 32);
}
}
try {
$randomizer = new Randomizer(new BrokenEngine());
// Wirft BrokenRandomEngineError, weil das Engine kaputte Daten liefert
echo $randomizer->getInt(0, 100);
} catch (BrokenRandomEngineError $e) {
echo 'Defektes Engine erkannt: ' . $e->getMessage() . PHP_EOL;
} catch (RandomError $e) {
echo 'Allgemeiner Zufallsfehler: ' . $e->getMessage() . PHP_EOL;
}
// Wichtig · Fallstricke
Nicht stille Fehler: Da Random\RandomError von \Error erbt, wird sie – falls sie nicht abgefangen wird – das Skript mit einem fatalen Fehler beenden. Im Gegensatz zu \Exception ist dies beabsichtigt, da defekte Zufallszahlengeneratoren ein ernstes Sicherheitsproblem darstellen können.
Sicherheitshinweis: Zufallsfehler sollten niemals still unterdrückt werden (leerer catch-Block), da ein defekter Zufallsgenerator zur Erzeugung vorhersagbarer Werte führen kann – besonders kritisch bei kryptografischen Anwendungen.