Signatur
Beschreibung
Yaf_Exception_TypeError ist eine spezialisierte Ausnahmenklasse innerhalb des Yet Another Framework (Yaf), die immer dann geworfen wird, wenn ein Typ-Fehler auftritt – beispielsweise wenn eine Methode einen Parameter eines unerwarteten Typs erhält oder eine interne Yaf-Komponente einen inkompatiblen Wert zurückliefert.
Sie erbt von Yaf_Exception, welche wiederum von der eingebauten PHP-Klasse RuntimeException abstammt. Dadurch lässt sie sich nahtlos in Standard-PHP-Fehlerbehandlungsroutinen integrieren und kann sowohl als Yaf_Exception_TypeError als auch als Yaf_Exception oder generisches Exception-Objekt gefangen werden.
Typische Szenarien, in denen diese Ausnahme auftreten kann, sind fehlerhafte Konfigurationswerte oder der Aufruf von Yaf-Methoden mit Argumenten des falschen Typs (z. B. String statt Array oder umgekehrt). In eigenen Controllern und Plugins empfiehlt es sich, diese Ausnahme explizit abzufangen, um dem Benutzer eine saubere Fehlermeldung zu präsentieren.
Da Yaf eine PECL-Erweiterung ist und als PHP-Extension installiert werden muss, steht Yaf_Exception_TypeError nur zur Verfügung, wenn die Yaf-Extension geladen ist.
Beispiele
Abfangen eines Typfehlers im Yaf-Controller
<?php
class IndexController extends Yaf_Controller_Abstract {
public function indexAction() {
try {
// Simulierter Aufruf, der einen Typfehler provoziert
$router = Yaf_Dispatcher::getInstance()->getRouter();
// Ungültiger Typ als Route-Name übergeben
$router->addRoute([], new Yaf_Route_Simple('m', 'c', 'a'));
} catch (Yaf_Exception_TypeError $e) {
echo 'Typfehler im Yaf-Framework: ' . $e->getMessage();
} catch (Yaf_Exception $e) {
echo 'Allgemeiner Yaf-Fehler: ' . $e->getMessage();
}
}
}
Globale Fehlerbehandlung für Yaf-Typfehler
<?php
class Bootstrap extends Yaf_Bootstrap_Abstract {
public function _initErrorHandler(Yaf_Dispatcher $dispatcher) {
// Zentralen Exception-Handler registrieren
set_exception_handler(function (Throwable $e) {
if ($e instanceof Yaf_Exception_TypeError) {
http_response_code(400);
echo json_encode([
'error' => 'TypeError',
'message' => $e->getMessage(),
'code' => $e->getCode(),
]);
} else {
http_response_code(500);
echo json_encode(['error' => 'InternalError']);
}
});
}
}
// Wichtig · Fallstricke
Voraussetzung: Die Yaf-Extension muss als PHP-Extension installiert und in der php.ini aktiviert sein (extension=yaf.so bzw. extension=yaf.dll). Ohne diese Extension ist die Klasse nicht verfügbar und führt zu einem fatalen PHP-Fehler.
Da Yaf_Exception_TypeError von Yaf_Exception erbt und nicht von PHPs eingebautem TypeError (PHP 7+), sollte beim Abfangen explizit auf Yaf_Exception_TypeError geprüft werden, um Verwechslungen mit PHP-nativen Typfehlern zu vermeiden.