Start · Sprachen · PHP · Referenz · Yar_Server_Exception

Yar_Server_Exception

Klasse

Basisklasse für Ausnahmen, die serverseitig im Yar-RPC-Framework ausgelöst werden.

seit PHP 2.0.0 Kategorie: error

Signatur

class Yar_Server_Exception extends RuntimeException

Beschreibung

Yar_Server_Exception ist die Basisklasse aller serverseitigen Ausnahmen in der Yar-RPC-Erweiterung für PHP. Sie wird ausgelöst, wenn ein entfernter Prozeduraufruf (RPC) auf Serverseite fehlschlägt – beispielsweise durch eine nicht gefundene Methode, interne Serverfehler oder ungültige Parameter.

Die Klasse erbt von RuntimeException und erweitert diese um die Methode getType(), die es ermöglicht, den genauen Fehlertyp des Yar-Fehlers (z. B. ERR_OUTPUT, ERR_EXCEPTION) abzufragen. Dies ist besonders nützlich, um auf Clientseite zwischen verschiedenen Fehlerursachen zu unterscheiden.

Wird auf Serverseite in einem registrierten Service eine Ausnahme geworfen, fängt der Yar-Server diese ab, serialisiert die Fehlerinformation und überträgt sie an den Client, wo sie dann als Yar_Server_Exception erneut ausgelöst wird. So können Fehlerursachen transparent über Prozess- und Rechnergrenzen hinweg kommuniziert werden.

Im typischen Einsatz sollte der Client-Code Yar_Client_Exception und/oder Yar_Server_Exception separat fangen, um zwischen Kommunikationsfehlern und serverseitigen Logikfehlern zu unterscheiden.

Beispiele

Serverseitige Ausnahme auf Clientseite abfangen

<?php
// server.php – Yar-Server mit einer Methode, die eine Ausnahme wirft
class MyService {
    public function divide(int $a, int $b): float {
        if ($b === 0) {
            throw new RuntimeException('Division durch Null ist nicht erlaubt.');
        }
        return $a / $b;
    }
}

$server = new Yar_Server(new MyService());
$server->handle();

// client.php – Yar-Client, der den Server aufruft
$client = new Yar_Client('http://example.com/server.php');

try {
    $result = $client->divide(10, 0);
} catch (Yar_Server_Exception $e) {
    echo 'Serverseitiger Fehler: ' . $e->getMessage() . PHP_EOL;
    echo 'Fehlertyp: ' . $e->getType() . PHP_EOL;
} catch (Yar_Client_Exception $e) {
    echo 'Verbindungsfehler: ' . $e->getMessage() . PHP_EOL;
}
Serverseitiger Fehler: Division durch Null ist nicht erlaubt. Fehlertyp: ERR_EXCEPTION

Gezieltes Reagieren auf verschiedene Fehlertypen

<?php
$client = new Yar_Client('http://example.com/server.php');

try {
    $result = $client->nonExistentMethod();
} catch (Yar_Server_Exception $e) {
    switch ($e->getType()) {
        case 'ERR_EXCEPTION':
            echo 'Auf dem Server wurde eine Ausnahme geworfen: ' . $e->getMessage();
            break;
        case 'ERR_OUTPUT':
            echo 'Fehlerhafte Ausgabe vom Server: ' . $e->getMessage();
            break;
        default:
            echo 'Unbekannter Serverfehler [' . $e->getType() . ']: ' . $e->getMessage();
    }
}
Unbekannter Serverfehler [ERR_EXCEPTION]: Call to undefined method MyService::nonExistentMethod()

// Wichtig · Fallstricke

Sicherheitshinweis: Serverseitige Ausnahme-Meldungen werden über das Netzwerk an den Client übertragen. Achte darauf, dass in Produktionsumgebungen keine sensiblen Informationen (z. B. Datenbankzugangsdaten, interne Pfade) in Ausnahme-Meldungen enthalten sind, da diese dann auf der Clientseite sichtbar werden.

Die Methode getType() gibt den Yar-internen Fehlertyp als string zurück und ist nicht Teil der Standard-Exception-Schnittstelle. Sie steht nur in Yar_Server_Exception und Yar_Client_Exception zur Verfügung.

Die Yar-Erweiterung ist eine PECL-Erweiterung und muss separat installiert werden. Sie steht standardmäßig nicht in PHP zur Verfügung.