Start · Sprachen · PHP · Referenz · EventException

EventException

Klasse

Wird ausgelöst, wenn Methoden der Event-Erweiterung einen nicht behebbaren Fehler feststellen.

Kategorie: error

Signatur

class EventException extends RuntimeException

Beschreibung

EventException ist die Ausnahme-Klasse der Event-Erweiterung (PECL event). Sie wird geworfen, wenn eine interne Methode der Erweiterung auf einen Fehler stößt, der nicht durch einen einfachen Rückgabewert signalisiert werden kann – zum Beispiel bei ungültigen Konfigurationen, fehlgeschlagenen Ressource-Initialisierungen oder nicht erlaubten Operationen auf Event-Objekten.

Da EventException von RuntimeException erbt, kann sie mit einem normalen try/catch-Block abgefangen werden. Es empfiehlt sich, bei der Arbeit mit EventBase, Event, EventBuffer und verwandten Klassen grundsätzlich EventException oder zumindest RuntimeException zu fangen, um stabile Event-Loop-Anwendungen zu schreiben.

Die Klasse fügt gegenüber RuntimeException keine zusätzlichen Methoden oder Eigenschaften hinzu. Sie dient ausschließlich als spezifischer Ausnahme-Typ, der eine präzisere Fehlerbehandlung für Event-Erweiterungs-Code erlaubt.

Typische Anwendungsfälle sind asynchrone Netzwerkserver oder Clients, die auf der libevent-Bibliothek basieren und bei denen eine korrekte Fehlerbehandlung entscheidend für die Stabilität ist.

Beispiele

EventException fangen beim Initialisieren einer EventBase

<?php
try {
    // EventBase mit einer ungültigen Konfiguration erstellen
    $cfg = new EventConfig();
    // Erzwinge eine ungültige Backend-Methode (nicht verfügbar auf diesem System)
    $cfg->requireFeatures(EventConfig::FEATURE_O1);

    $base = new EventBase($cfg);
    echo "EventBase erfolgreich erstellt.\n";
} catch (EventException $e) {
    echo "Event-Fehler aufgetreten: " . $e->getMessage() . "\n";
    echo "Code: " . $e->getCode() . "\n";
}
?>
Event-Fehler aufgetreten: (Fehlermeldung der Event-Erweiterung) Code: 0

Unterschiedliche Ausnahme-Typen getrennt behandeln

<?php
function createEvent(EventBase $base): Event
{
    // Versuche, ein Signal-Event zu erstellen
    $event = Event::signal($base, SIGTERM, function () {
        echo "SIGTERM empfangen.\n";
    });

    if (!$event) {
        throw new EventException("Signal-Event konnte nicht erstellt werden.");
    }

    return $event;
}

try {
    $base = new EventBase();
    $event = createEvent($base);
    $event->add();
    echo "Event erfolgreich hinzugefügt.\n";
} catch (EventException $e) {
    // Spezifischer Fehler der Event-Erweiterung
    echo "EventException: " . $e->getMessage() . "\n";
} catch (RuntimeException $e) {
    // Allgemeiner Laufzeitfehler
    echo "RuntimeException: " . $e->getMessage() . "\n";
} catch (Throwable $e) {
    echo "Unbekannter Fehler: " . $e->getMessage() . "\n";
}
?>
Event erfolgreich hinzugefügt.

// Wichtig · Fallstricke

PECL-Abhängigkeit: EventException ist nur verfügbar, wenn die PECL-Erweiterung event installiert und geladen ist. Sie ist nicht Teil des PHP-Kerns. Ohne diese Erweiterung führt ein catch (EventException ...)-Block zu einem fatalen Fehler (Class not found).

Da die Klasse keine zusätzlichen Eigenschaften definiert, stehen ausschließlich die Standard-Methoden von RuntimeException bzw. Exception zur Verfügung: getMessage(), getCode(), getFile(), getLine(), getTrace() usw.