Signatur
Beschreibung
UI\Exception\RuntimeException ist die spezifische Ausnahme der UI-Erweiterung (ext/ui, basierend auf libui), die bei Laufzeitfehlern ausgelöst wird. Sie erbt von der eingebauten \RuntimeException und steht damit im PHP-Standardklassenhierarchie-Baum der Exceptions.
Typische Auslöser sind Operationen, die zur Laufzeit fehlschlagen: das Hinzufügen von Controls zu einem bereits gerenderten Fenster, der Aufruf von UI-Methoden in ungültigem Zustand oder das Starten der Event-Schleife, wenn kein Fenster existiert. Die Ausnahme signalisiert also immer ein logisches oder zeitliches Problem – der Code selbst ist syntaktisch korrekt, aber der Aufruf passt nicht zum aktuellen Zustand der Anwendung.
Da UI\Exception\RuntimeException von \RuntimeException erbt, kann sie sowohl mit einem spezifischen catch(UI\Exception\RuntimeException $e)-Block als auch mit einem allgemeinen catch(\RuntimeException $e)-Block abgefangen werden. Für eine feingranulare Fehlerbehandlung in GUI-Anwendungen wird der spezifische Block empfohlen.
Die UI-Erweiterung ist als experimentell eingestuft; die API kann sich zwischen Versionen ändern. In Produktionsumgebungen sollte sie daher nur mit Bedacht eingesetzt werden.
Beispiele
Abfangen eines Laufzeitfehlers beim Starten der UI-Schleife
<?php
use UI\Window;
use UI\Exception\RuntimeException;
try {
// Versuch, die UI-Schleife ohne ein aktives Fenster zu starten
UI\run();
} catch (RuntimeException $e) {
echo 'UI-Laufzeitfehler: ' . $e->getMessage() . PHP_EOL;
echo 'Code: ' . $e->getCode() . PHP_EOL;
}
Fehler beim Hinzufügen eines Controls nach dem Rendern
<?php
use UI\Window;
use UI\Controls\Button;
use UI\Exception\RuntimeException;
try {
$window = new Window('Test', 400, 300, false);
$window->show();
// Ein Control hinzufügen, nachdem das Fenster bereits gezeigt wurde
$button = new Button('Klick mich');
$window->add($button);
} catch (RuntimeException $e) {
echo 'Fehler: ' . $e->getMessage() . PHP_EOL;
} catch (\Throwable $e) {
echo 'Allgemeiner Fehler: ' . $e->getMessage() . PHP_EOL;
}
// Wichtig · Fallstricke
Experimentelle Erweiterung: ext/ui gilt seit ihrer Einführung als experimentell und ist nicht Bestandteil der Standard-PHP-Distribution. Sie muss separat installiert werden (z. B. über PECL). Die API und das Ausnahme-Verhalten können sich ohne Vorankündigung ändern.
Plattformabhängigkeit: Da libui plattformabhängige GUI-Backends nutzt (Win32, Cocoa, GTK), können sich die genauen Fehlermeldungen und Auslöser je nach Betriebssystem unterscheiden. Testcode sollte auf allen Zielplattformen überprüft werden.
Die Klassenhierarchie lautet: UI\Exception\RuntimeException → \RuntimeException → \Exception → \Throwable.