Signatur
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";
}
?>
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";
}
?>
// 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.