Signatur
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;
}
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();
}
}
// 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.