Signatur
Beschreibung
ZMQException ist die gemeinsame Basisklasse aller Ausnahmen, die von der PHP-ZMQ-Erweiterung (ZeroMQ) geworfen werden. Sie erweitert RuntimeException aus der PHP-Standardbibliothek und stellt damit die vertraute Exception-Hierarchie zur Verfügung.
Konkrete Unterklassen wie ZMQSocketException, ZMQContextException, ZMQPollException und ZMQDeviceException werden für spezifische Fehlersituationen verwendet. Durch das Abfangen von ZMQException lassen sich daher alle ZMQ-bezogenen Fehler zentral behandeln, ohne jede Unterklasse einzeln aufführen zu müssen.
Typische Fehlerquellen sind ungültige Socket-Optionen, fehlgeschlagene Verbindungsversuche oder Ressourcenerschöpfung im ZeroMQ-Context. Der Fehler-Code (getCode()) entspricht dabei dem systemnahen errno-Wert von ZeroMQ, was eine genaue Diagnose ermöglicht.
Beispiele
Alle ZMQ-Fehler zentral abfangen
<?php
try {
$context = new ZMQContext();
$socket = $context->getSocket(ZMQ::SOCKET_REQ, 'my-requester');
// Verbindung zu einem nicht vorhandenen Endpunkt
$socket->connect('tcp://127.0.0.1:9999');
$socket->send('Hello');
// recv() mit NOBLOCK, um einen Timeout-Fehler zu provozieren
$reply = $socket->recv(ZMQ::MODE_NOBLOCK);
} catch (ZMQException $e) {
echo 'ZMQ-Fehler: ' . $e->getMessage() . PHP_EOL;
echo 'Fehler-Code (errno): ' . $e->getCode() . PHP_EOL;
}
Unterscheidung von ZMQ-Unterklassen
<?php
try {
$context = new ZMQContext();
$socket = $context->getSocket(ZMQ::SOCKET_PUB);
// Ungültige Socket-Option setzen
$socket->setSockOpt(9999, 'invalid');
} catch (ZMQSocketException $e) {
// Spezifischer Fehler beim Socket
echo 'Socket-Fehler: ' . $e->getMessage() . PHP_EOL;
} catch (ZMQException $e) {
// Fallback für alle anderen ZMQ-Fehler
echo 'Allgemeiner ZMQ-Fehler: ' . $e->getMessage() . PHP_EOL;
} catch (Exception $e) {
echo 'Sonstiger Fehler: ' . $e->getMessage() . PHP_EOL;
}
// Wichtig · Fallstricke
Fehler-Codes: Der über getCode() zurückgegebene Wert entspricht dem errno-Wert aus der nativen ZeroMQ-Bibliothek (z. B. EAGAIN = 11, ETERM = 156384765). Diese Codes können plattformabhängig variieren.
Voraussetzung: Die ZMQ-Erweiterung (pecl/zmq) muss installiert und in der php.ini aktiviert sein. Sie ist nicht Teil der PHP-Kerninstallation.
Hierarchie: Alle spezifischen ZMQ-Ausnahmen (ZMQSocketException, ZMQContextException, ZMQPollException, ZMQDeviceException) erben von ZMQException, sodass ein einzelner catch (ZMQException $e)-Block ausreicht, um sämtliche ZMQ-Fehler abzufangen.