Start · Sprachen · PHP · Referenz · SimdJsonValueError

SimdJsonValueError

Klasse

Wird ausgelöst, wenn ein JSON-Wert bei der Verarbeitung mit der SimdJson-Erweiterung nicht dem erwarteten Typ entspricht.

seit PHP 8.0.0 Kategorie: error

Signatur

class SimdJsonValueError extends ValueError

Beschreibung

SimdJsonValueError ist eine Fehlerklasse der SimdJson-PHP-Erweiterung, die von der eingebauten ValueError-Klasse erbt. Sie wird geworfen, wenn ein JSON-Wert nicht mit dem erwarteten Datentyp übereinstimmt – beispielsweise wenn ein Integer-Wert erwartet wird, der tatsächliche JSON-Inhalt aber ein Objekt oder Array enthält.

Die SimdJson-Erweiterung (SIMD JSON) bietet eine hochperformante Alternative zur eingebauten json_decode()-Funktion, indem sie prozessorinterne SIMD-Befehle (Single Instruction, Multiple Data) nutzt. Die Erweiterung stellt eigene spezifische Ausnahme- und Fehlerklassen bereit, um zwischen verschiedenen Fehlerursachen differenzieren zu können.

Da SimdJsonValueError von ValueError erbt, kann sie sowohl mit catch (SimdJsonValueError $e) für spezifische Behandlung als auch mit catch (ValueError $e) allgemein abgefangen werden. Dies ermöglicht eine flexible Fehlerbehandlungsarchitektur, bei der zwischen SimdJson-spezifischen und allgemeinen Typfehlern unterschieden werden kann.

Typische Auslöser sind fehlerhafte Tiefenwert-Parameter oder ungültige Flags beim Aufruf von SimdJson-Dekodierungsfunktionen, wenn der übergebene Wert nicht im erlaubten Wertebereich oder Typ liegt.

Beispiele

SimdJsonValueError abfangen bei ungültigem Depth-Parameter

<?php
// Voraussetzung: simdjson-Erweiterung ist installiert
// Ein ungültiger Tiefenwert (z. B. negativ) provoziert einen SimdJsonValueError

$json = '{"name": "Max", "age": 30}';

try {
    // depth muss eine positive ganze Zahl sein; 0 ist ungültig
    $result = simdjson_decode($json, true, 0);
} catch (\SimdJsonValueError $e) {
    echo 'SimdJson-Wertefehler: ' . $e->getMessage() . PHP_EOL;
} catch (\ValueError $e) {
    echo 'Allgemeiner Wertefehler: ' . $e->getMessage() . PHP_EOL;
}
SimdJson-Wertefehler: simdjson_decode(): Argument #3 ($depth) must be greater than 0

Unterschiedliche Fehlerklassen gezielt behandeln

<?php
// Demonstration der Klassenhierarchie

function decodeSafe(string $json, bool $assoc = true, int $depth = 512): mixed {
    try {
        return simdjson_decode($json, $assoc, $depth);
    } catch (\SimdJsonValueError $e) {
        // Spezifisch: Typ-/Werteproblem in SimdJson
        error_log('[SimdJson] Typfehler: ' . $e->getMessage());
        return null;
    } catch (\SimdJsonException $e) {
        // Spezifisch: Syntaxfehler im JSON
        error_log('[SimdJson] JSON-Fehler: ' . $e->getMessage());
        return null;
    }
}

// Ungültige Tiefe
$result = decodeSafe('{"key": "value"}', true, -1);
var_dump($result);

// Valides JSON
$result = decodeSafe('{"key": "value"}');
var_dump($result);
NULL array(1) { ["key"]=> string(5) "value" }

// Wichtig · Fallstricke

Hinweis zur Verfügbarkeit: SimdJsonValueError ist nur verfügbar, wenn die simdjson PHP-Erweiterung installiert ist. Sie ist nicht Teil des PHP-Kerns. Prüfe die Verfügbarkeit mit extension_loaded('simdjson').

Klassenhierarchie: SimdJsonValueError extends ValueError extends Error. Sie ist damit kein Exception-Subtyp und wird von einem catch (\Exception $e)-Block nicht erfasst. Verwende catch (\Throwable $e), um alle Fehler und Ausnahmen zu fangen.

Abgrenzung: Für Syntaxfehler im JSON-String selbst wird stattdessen SimdJsonException geworfen. SimdJsonValueError betrifft ausschließlich ungültige Parameterwerte beim Funktionsaufruf.