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