Start · Sprachen · PHP · Referenz · swoole_clear_error

swoole_clear_error

Funktion

Löscht den zuletzt gesetzten Socket-Fehlercode sowie den globalen letzten Fehlercode in der Swoole-Erweiterung.

Kategorie: misc

Signatur

swoole_clear_error(): void

Beschreibung

swoole_clear_error() setzt den internen Fehlerzustand der Swoole-Erweiterung zurück. Dies umfasst sowohl den Socket-spezifischen Fehlercode als auch den allgemeinen letzten Fehlercode, der über swoole_last_error() abgerufen werden kann.

Die Funktion ist nützlich, wenn in einer langen Coroutine-Schleife oder nach einer Fehlerbehandlung sichergestellt werden soll, dass ein veralteter Fehlerzustand nicht irrtümlich als aktueller Fehler interpretiert wird. Ohne explizites Zurücksetzen könnten Folgefehlerprüfungen auf einen alten, bereits behandelten Fehlerzustand reagieren.

Typischerweise wird swoole_clear_error() direkt nach dem Behandeln eines Fehlers aufgerufen, bevor eine weitere I/O-Operation oder ein neuer Verbindungsversuch gestartet wird, um eine saubere Fehlerzustandsbasis zu gewährleisten.

Rückgabewert

Typ
void
Beschreibung
Die Funktion gibt keinen Wert zurück.

Beispiele

Fehlerzustand nach fehlgeschlagenem Verbindungsversuch zurücksetzen

<?php
// Swoole Coroutine-Kontext vorausgesetzt
Co\run(function () {
    $client = new Swoole\Coroutine\Client(SWOOLE_SOCK_TCP);

    // Absichtlich eine nicht erreichbare Adresse verwenden
    $result = $client->connect('192.0.2.1', 9999, 0.5);

    if (!$result) {
        $errorCode = swoole_last_error();
        echo 'Verbindungsfehler: ' . $errorCode . PHP_EOL;

        // Fehlerzustand bereinigen, bevor weitere Versuche unternommen werden
        swoole_clear_error();

        echo 'Fehlerzustand nach clear_error: ' . swoole_last_error() . PHP_EOL;
    }
});
Verbindungsfehler: 110 Fehlerzustand nach clear_error: 0

Fehlerzustand in einer Wiederholungsschleife zurücksetzen

<?php
Co\run(function () {
    $maxRetries = 3;

    for ($i = 0; $i < $maxRetries; $i++) {
        $client = new Swoole\Coroutine\Client(SWOOLE_SOCK_TCP);
        $result = $client->connect('127.0.0.1', 9501, 1.0);

        if ($result) {
            echo 'Verbindung erfolgreich im Versuch ' . ($i + 1) . PHP_EOL;
            break;
        }

        echo 'Versuch ' . ($i + 1) . ' fehlgeschlagen. Fehlercode: ' . swoole_last_error() . PHP_EOL;

        // Fehlerzustand bereinigen, damit der nächste Schleifendurchlauf
        // auf einem sauberen Zustand aufbauen kann
        swoole_clear_error();

        Co::sleep(0.5);
    }
});
Versuch 1 fehlgeschlagen. Fehlercode: 111 Versuch 2 fehlgeschlagen. Fehlercode: 111 Versuch 3 fehlgeschlagen. Fehlercode: 111

// Wichtig · Fallstricke

Swoole-spezifisch: Diese Funktion steht nur zur Verfügung, wenn die Swoole-PHP-Erweiterung installiert und geladen ist. Sie ist kein Bestandteil von PHP selbst.

Das Vergessen von swoole_clear_error() in Wiederholungsschleifen oder Fehlerbehandlungsroutinen kann dazu führen, dass Prüfungen mit swoole_last_error() fälschlicherweise einen bereits behandelten Fehler melden und damit die Programmlogik verfälschen.