Start · Sprachen · PHP · Referenz · Random\RandomException

Random\RandomException

Klasse

Basisklasse für Ausnahmen, die bei der Erzeugung oder Nutzung von Zufallswerten innerhalb der <code>Random</code>-Extension auftreten.

seit PHP 8.2.0 Kategorie: error

Signatur

class Random\RandomException extends \RuntimeException

Beschreibung

Random\RandomException ist die gemeinsame Basisklasse für alle Exceptions, die von den Klassen und Funktionen der Random-Extension in PHP 8.2+ geworfen werden können. Sie erweitert die Standard-Klasse \RuntimeException und dient als einheitlicher Fangpunkt für Fehler rund um die Zufallszahlen-Infrastruktur.

Typische Situationen, in denen diese Exception ausgelöst wird, sind: nicht ausreichend Entropie vom Betriebssystem (z. B. bei frühem Boot), ungültige Initialisierungsdaten für einen Random\Engine-Treiber oder interne Fehler des Engines (z. B. Überläufe bei Random\Engine\Mt19937 nach Erschöpfung des Zustandsraums).

Konkrete Unterklassen wie Random\BrokenRandomEngineError erben von Random\RandomException. Es empfiehlt sich, Random\RandomException zu fangen, wenn man alle Fehler der Zufallszahlen-Erzeugung abfangen möchte, unabhängig davon, welche Engine im Einsatz ist.

Da Random\RandomException eine RuntimeException ist, muss sie nicht zwingend deklariert werden und tritt erst zur Laufzeit auf – ein defensives try/catch ist überall dort ratsam, wo die Anwendung auf kryptographisch sichere Zufallswerte angewiesen ist.

Beispiele

RandomException beim Erstellen eines Randomizers abfangen

<?php
use Random\Randomizer;
use Random\Engine\Xoshiro256StarStar;
use Random\RandomException;

try {
    // Xoshiro256StarStar kann eine RandomException werfen,
    // wenn der Seed-Prozess fehlschlägt
    $engine = new Xoshiro256StarStar();
    $randomizer = new Randomizer($engine);

    echo $randomizer->getInt(1, 100) . PHP_EOL;
} catch (RandomException $e) {
    // Alle Fehler der Random-Extension werden hier gefangen
    echo 'Fehler bei der Zufallszahl-Erzeugung: ' . $e->getMessage() . PHP_EOL;
}
42

Eigene fehlerhafte Engine provoziert RandomException

<?php
use Random\Engine;
use Random\Randomizer;
use Random\RandomException;

// Eine absichtlich fehlerhafte Engine, die immer eine Exception wirft
class BrokenEngine implements Engine
{
    public function generate(): string
    {
        throw new RandomException('Engine liefert keine Zufallswerte.');
    }
}

try {
    $randomizer = new Randomizer(new BrokenEngine());
    echo $randomizer->getInt(1, 10);
} catch (RandomException $e) {
    echo 'Abgefangen: ' . $e->getMessage() . PHP_EOL;
    echo 'Fehlercode: ' . $e->getCode() . PHP_EOL;
}
Abgefangen: Engine liefert keine Zufallswerte. Fehlercode: 0

// Wichtig · Fallstricke

Sicherheitshinweis: Tritt eine Random\RandomException auf, sollte die Anwendung niemals auf einen unsicheren Fallback (z. B. mt_rand()) zurückfallen, wenn kryptographisch sichere Zufallswerte benötigt werden. Die Exception sollte in diesem Fall nach oben propagiert oder der Vorgang abgebrochen werden.

Random\RandomException ist nicht identisch mit einem Error: Sie ist eine RuntimeException und wird daher nicht durch set_error_handler(), sondern nur durch try/catch oder set_exception_handler() behandelt.

In PHP < 8.2 existiert diese Klasse nicht; dort werden Fehler in der Zufallszahlen-Erzeugung teils als Warnings oder via \Exception signalisiert.