Start · Sprachen · PHP · Referenz · Uri\UriError

Uri\UriError

Klasse

Basisklasse für alle Fehler der URI-Erweiterung (<code>Uri\</code>-Namespace); wird geworfen, wenn URI-Operationen fehlschlagen.

seit PHP 8.4.0 Kategorie: error

Signatur

class Uri\UriError extends \Error

Beschreibung

Uri\UriError ist die gemeinsame Basisklasse aller Ausnahmen, die von der eingebauten URI-Erweiterung (verfügbar ab PHP 8.4) ausgelöst werden. Sie erbt direkt von \Error und folgt damit der PHP-Konvention, schwere, nicht wiederherstellbare Laufzeitfehler als Error-Objekte zu modellieren.

Konkrete Unterklassen – etwa Uri\InvalidUriError – werden geworfen, wenn eine URI-Zeichenkette syntaktisch ungültig ist oder eine Operation auf einem URI-Objekt scheitert. Durch das Abfangen von Uri\UriError lassen sich alle URI-spezifischen Fehler zentral behandeln, ohne jede Unterklasse einzeln nennen zu müssen.

Typischer Einsatz: Beim Parsen oder Manipulieren von URIs mit Uri\Uri bzw. Uri\UriTemplate sollte der aufrufende Code einen catch (Uri\UriError $e)-Block verwenden, um alle URI-Fehler sicher abzufangen und geeignet zu reagieren (z. B. Fehlermeldung loggen, Fallback-URI verwenden).

Beispiele

Ungültige URI abfangen

<?php
use Uri\Uri;
use Uri\UriError;

try {
    // Syntaktisch ungültige URI – löst Uri\InvalidUriError aus,
    // eine Unterklasse von Uri\UriError
    $uri = Uri::parse('ht tp://example .com/path??');
} catch (UriError $e) {
    echo 'URI-Fehler: ' . $e->getMessage() . PHP_EOL;
}
URI-Fehler: The URI "ht tp://example .com/path??" is invalid.

Generischer Fehler-Handler für mehrere URI-Operationen

<?php
use Uri\Uri;
use Uri\UriError;

function normalizeUri(string $input): string
{
    try {
        $uri = Uri::parse($input);
        return (string) $uri->normalize();
    } catch (UriError $e) {
        // Zentrales Handling aller URI-Fehlerarten
        error_log('Ungültige URI übergeben: ' . $e->getMessage());
        return '';
    }
}

echo normalizeUri('https://Example.COM/Foo/../bar') . PHP_EOL;
echo normalizeUri('not a uri at all!!!') . PHP_EOL;
https://example.com/bar

// Wichtig · Fallstricke

Klassenhierarchie: Uri\UriError erbt von \Error, nicht von \Exception. Ein catch (\Exception $e)-Block fängt diese Fehler daher nicht ab. Verwende catch (\Throwable $t), wenn du sowohl Error- als auch Exception-Typen zentral behandeln möchtest.

Da die URI-Erweiterung ab PHP 8.4 zum PHP-Kern gehört und keine zusätzliche Extension aktiviert werden muss, steht Uri\UriError auf allen PHP-8.4+-Installationen zur Verfügung.