Start · Sprachen · PHP · Referenz · Yar_Client_Exception

Yar_Client_Exception

Klasse

Basisklasse für alle Ausnahmen, die auf der Client-Seite des Yar-RPC-Frameworks auftreten.

seit PHP 1.0.0 Kategorie: error

Signatur

class Yar_Client_Exception extends Yar_Exception

Beschreibung

Yar_Client_Exception ist die Basisklasse für Fehler, die während der Kommunikation zwischen einem Yar-RPC-Client und einem entfernten Server entstehen. Sie erbt von Yar_Exception und damit transitiv von der eingebauten PHP-Klasse Exception.

Typische Situationen, in denen diese Ausnahme (oder eine davon abgeleitete Unterklasse) geworfen wird, sind: Verbindungsfehler zum Remote-Server, Timeouts, Fehler beim Serialisieren/Deserialisieren der RPC-Nutzlast sowie ungültige Serverantworten. Mit einem catch(Yar_Client_Exception $e)-Block lassen sich gezielt alle clientseitigen RPC-Fehler abfangen, ohne serverseitige Ausnahmen zu erfassen.

Die Klasse bietet über die von Exception geerbten Methoden (getMessage(), getCode(), getTrace() usw.) hinaus in der Regel keine zusätzlichen öffentlichen Methoden. Der Fehlertyp lässt sich über den Fehlercode (getCode()) weiter differenzieren – Yar definiert interne Fehlercodes für Transport-, Protokoll- und Anwendungsfehler.

Für eine feinkörnigere Fehlerbehandlung empfiehlt es sich, konkrete Unterklassen wie Yar_Client_Transport_Exception oder Yar_Client_Packager_Exception zuerst abzufangen und Yar_Client_Exception als Fallback-Handler zu verwenden.

Beispiele

Clientseitigen RPC-Fehler abfangen

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

try {
    $result = $client->someRemoteMethod('arg1', 42);
    echo 'Ergebnis: ' . $result;
} catch (Yar_Client_Transport_Exception $e) {
    // Spezifischer Transportfehler (z. B. Verbindung abgelehnt)
    echo 'Transportfehler [' . $e->getCode() . ']: ' . $e->getMessage();
} catch (Yar_Client_Exception $e) {
    // Alle übrigen clientseitigen Yar-Fehler
    echo 'Client-Fehler [' . $e->getCode() . ']: ' . $e->getMessage();
}
Transportfehler [0]: Failed to connect to example.com port 80

Timeout konfigurieren und Ausnahme behandeln

<?php
$client = new Yar_Client('http://example.com/rpc/server.php');
$client->SetOpt(YAR_OPT_CONNECT_TIMEOUT, 1000); // 1 Sekunde Timeout
$client->SetOpt(YAR_OPT_TIMEOUT, 3000);         // 3 Sekunden Lese-Timeout

try {
    $data = $client->fetchLargeDataset();
    var_dump($data);
} catch (Yar_Client_Exception $e) {
    // Timeout oder ein anderer clientseitiger Fehler
    fprintf(STDERR,
        "YAR-Client-Fehler (Code %d): %s\n",
        $e->getCode(),
        $e->getMessage()
    );
    // Optional: Fehler weiterwerfen oder Fallback-Logik
    throw $e;
}

// Wichtig · Fallstricke

Fehlercodes: Yar verwendet interne numerische Fehlercodes, die sich zwischen verschiedenen Yar-Versionen unterscheiden können. Verlasse dich nicht auf konkrete Zahlenwerte, sondern nutze stattdessen die spezialisierten Unterklassen für eine robuste Unterscheidung.

Unterklassen: Yar_Client_Transport_Exception signalisiert Netzwerk-/HTTP-Fehler, Yar_Client_Packager_Exception Fehler beim Serialisieren der Daten. Fange diese vor Yar_Client_Exception ab, damit der spezifischere Handler greift.

Parallelaufrufe: Bei der Verwendung von Yar_Concurrent_Client werden Ausnahmen im Callback übergeben und nicht automatisch geworfen – überprüfe dort den Callback-Parameter auf Instanzen von Yar_Client_Exception.