Start · Sprachen · PHP · Referenz · Yaf_Exception

Yaf_Exception

Klasse

Basisklasse für alle Ausnahmen im Yaf-Framework (<code>Yaf_Exception</code> erweitert <code>RuntimeException</code>).

seit PHP 2.0.0 Kategorie: error

Signatur

class Yaf_Exception extends RuntimeException

Beschreibung

Yaf_Exception ist die gemeinsame Basisklasse aller Ausnahmen, die das Yaf-Framework (Yet Another Framework) intern wirft. Sie erweitert PHPs eingebaute RuntimeException und stellt damit das vertraute Exception-Interface inklusive getMessage(), getCode(), getTrace() usw. bereit.

Alle spezifischeren Yaf-Ausnahmeklassen – wie Yaf_Exception_RouterFailed, Yaf_Exception_DispatchFailed, Yaf_Exception_LoadFailed oder Yaf_Exception_TypeError – erben von Yaf_Exception. Dadurch lassen sich mit einem einzigen catch (Yaf_Exception $e)-Block sämtliche Framework-Fehler abfangen.

Im Zusammenspiel mit der Yaf-Konfigurationsoption yaf.use_namespace steht die Klasse auch als Yaf\Exception (mit Namespace) zur Verfügung. Für die Fehlerbehandlung auf Anwendungsebene kann in der Bootstrap-Klasse oder im Controller die Methode Yaf_Application::app()->getLastErrorMsg() genutzt werden, alternativ kann eine eigene Exception-Handler-Methode im Controller definiert werden.

Eigene Anwendungs-Ausnahmen können von Yaf_Exception abgeleitet werden, um eine einheitliche Ausnahme-Hierarchie innerhalb eines Yaf-Projekts zu gewährleisten.

Parameter

Name Typ Default Beschreibung
$message string "" Die menschenlesbare Fehlermeldung, die die Ausnahme beschreibt.
$code int 0 Ein optionaler numerischer Fehlercode zur programmatischen Unterscheidung von Ausnahmen.
$previous Throwable|null null Eine vorherige Ausnahme für Exception-Chaining (cause), die über getPrevious() abrufbar ist.

Beispiele

Alle Yaf-Ausnahmen zentral abfangen

<?php
class IndexController extends Yaf_Controller_Abstract
{
    public function indexAction()
    {
        // Simuliere einen Fehler im Framework-Kontext
        throw new Yaf_Exception('Etwas ist schiefgelaufen.', 500);
    }

    /**
     * Yaf ruft diese Methode automatisch auf, wenn eine Exception geworfen wird.
     */
    public function error(Yaf_Exception $e)
    {
        echo 'Yaf-Fehler [' . $e->getCode() . ']: ' . $e->getMessage();
    }
}
Yaf-Fehler [500]: Etwas ist schiefgelaufen.

Eigene Ausnahmeklasse von Yaf_Exception ableiten

<?php
class MyApp_Exception extends Yaf_Exception
{
    public function __construct(string $message, int $code = 0, ?Throwable $previous = null)
    {
        parent::__construct('[MyApp] ' . $message, $code, $previous);
    }
}

try {
    throw new MyApp_Exception('Datenbankverbindung fehlgeschlagen.', 503);
} catch (Yaf_Exception $e) {
    // Fängt sowohl Yaf_Exception als auch alle abgeleiteten Klassen
    echo get_class($e) . ': ' . $e->getMessage() . PHP_EOL;
    echo 'Code: ' . $e->getCode() . PHP_EOL;
}
MyApp_Exception: [MyApp] Datenbankverbindung fehlgeschlagen. Code: 503

// Wichtig · Fallstricke

Namespace-Modus: Wenn in der php.ini die Option yaf.use_namespace = 1 gesetzt ist, lautet der Klassenname Yaf\Exception statt Yaf_Exception. Code, der beide Modi unterstützen soll, sollte dies berücksichtigen.

Automatische Fehlerbehandlung: Yaf fängt unbehandelte Yaf_Exception-Instanzen automatisch ab und leitet sie an die error()-Methode des aktiven Controllers weiter, sofern diese definiert ist. Wird keine solche Methode gefunden, gibt Yaf den Fehler über den konfigurierten Error-Handler aus.

Unterklassen: Für spezifischere Fehlerprüfungen empfiehlt es sich, konkrete Unterklassen wie Yaf_Exception_LoadFailed oder Yaf_Exception_DispatchFailed in den catch-Blöcken zu verwenden, bevor ein allgemeiner Yaf_Exception-Block greift.