Signatur
Beschreibung
SimdJsonException ist die zentrale Fehlerklasse der PHP-Erweiterung simdjson, die auf der gleichnamigen C++-Bibliothek basiert und SIMD-Prozessorinstruktionen für besonders schnelles JSON-Parsing nutzt. Tritt ein Fehler beim Parsen oder Auswerten von JSON auf, wirft die Erweiterung eine Instanz dieser Klasse.
Als direkte Unterklasse von RuntimeException kann SimdJsonException wie jede andere PHP-Ausnahme mit einem try/catch-Block abgefangen werden. Da sie von RuntimeException erbt, kann alternativ auch catch (RuntimeException $e) verwendet werden, um Fehler generisch zu behandeln.
Typische Auslöser sind ungültiges JSON (z. B. fehlende Anführungszeichen, unerlaubte Zeichen), ein zu tief verschachteltes Dokument (überschrittene Tiefenlimit-Grenze) oder ein ungültiger JSON-Pointer. Über die geerbten Methoden getMessage() und getCode() lassen sich detaillierte Informationen zum aufgetretenen Fehler abrufen.
Sinnvoll ist der Einsatz von SimdJsonException immer dann, wenn JSON-Eingaben aus externen Quellen (APIs, Dateien, Nutzereingaben) verarbeitet werden und dabei höchste Verarbeitungsgeschwindigkeit gefragt ist, ohne auf robuste Fehlerbehandlung zu verzichten.
Beispiele
Ungültiges JSON abfangen
<?php
try {
$result = simdjson_decode('{ungültiges json}', true);
} catch (SimdJsonException $e) {
echo 'JSON-Fehler: ' . $e->getMessage() . PHP_EOL;
echo 'Fehlercode: ' . $e->getCode() . PHP_EOL;
}
Zu tief verschachteltes JSON abfangen
<?php
// Standardmäßige maximale Tiefe ist 512
$deepJson = str_repeat('{"a":', 600) . '1' . str_repeat('}', 600);
try {
$result = simdjson_decode($deepJson, true);
} catch (SimdJsonException $e) {
echo 'Tiefenlimit überschritten: ' . $e->getMessage() . PHP_EOL;
}
JSON-Pointer mit Fehlerbehandlung
<?php
$json = '{"name":"Alice","age":30}';
try {
// Ungültiger Pointer – Schlüssel existiert nicht
$value = simdjson_key_value($json, '/nonexistent');
} catch (SimdJsonException $e) {
echo 'Pointer-Fehler: ' . $e->getMessage() . PHP_EOL;
}
// Wichtig · Fallstricke
Versionshinweis: Die simdjson-Erweiterung ist keine Standard-PHP-Extension und muss separat über PECL installiert werden (pecl install simdjson). Die Verfügbarkeit von SimdJsonException hängt daher von der installierten Version der Erweiterung ab.
Abgrenzung zu json_decode(): Die native PHP-Funktion json_decode() wirft bei fehlerhaftem JSON keine Ausnahme, sondern gibt null zurück und setzt einen Fehlercode. Die simdjson-Erweiterung hingegen wirft stets eine SimdJsonException, was eine sauberere Fehlerbehandlung ohne manuelle json_last_error()-Prüfungen ermöglicht.
Tipp: Für eine allgemeine Fehlerbehandlung, die unabhängig von der verwendeten JSON-Bibliothek ist, empfiehlt es sich, sowohl SimdJsonException als auch JsonException abzufangen oder den gemeinsamen Elterntyp RuntimeException zu verwenden.