Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

PHP 7.3: sollevare un'eccezione in caso di errore JSON

Fino a PHP 7.2 in caso di errore non si poteva bloccare l'esecuzione di uno script per la gestione di JSON, il problema è stato risolto in PHP 7.3 con JSON_THROW_ON_ERROR.
Fino a PHP 7.2 in caso di errore non si poteva bloccare l'esecuzione di uno script per la gestione di JSON, il problema è stato risolto in PHP 7.3 con JSON_THROW_ON_ERROR.
Link copiato negli appunti

PHP ci mette a disposizione nativamente due funzioni per gestire i JSON (JavaScript Object Notation):

  • json_encode()
  • json_decode()

Con queste due funzioni riusciamo a gestire completamente, o quasi, le operazioni di codifica e decodifica di un JSON. Le due funzioni, infatti, funzionano perfettamente e sono semplicissime da usare finché non abbiamo a che fare con la gestione degli errori.

La funzione json_decode(), ad esempio, restituisce null in caso di errore ma questo è un comportamento fuorviante poiché null è anche un tipo di dato valido in JSON.

Come fare quindi a capire se qualcosa è andato storto oppure se, effettivamente, l'operazione è andata a buon fine? Fino alla versione 7.2 l'unico modo a disposizione era utilizzare le funzioni json_last_error() e json_last_error_msg(). Rispettivamente restituiscono una costante ed una stringa che indicano se si è verificato un errore.

Entrambe le funzioni, però, non bloccano l'esecuzione dello script in caso di errore e, di conseguenza, tutta la logica relativa è delegata al programmatore.

Un esempio di gestione degli errori JSON compatibile con la versione 7.2 è il seguente:

// Una stringa JSON non valida che dovrebbe restituire un errore
// Abbiamo usato gli apici anziché le virgolette, in JSON è un errore di sintassi
$json = "{'Organization': 'PHP Documentation Team'}";
$array = json_decode($json);
if (json_last_error()) {
    throw new \RuntimeException(json_last_error_msg());
}

Risulta un po' verbosa e, soprattutto, aggiunge complessità dal punto di vista della gestione dell'eccezione. O aggiungiamo una nostra eccezione (es. \My\App\Exception\JsonException oppure dobbiamo catchare un'eccezione base per gestire quel tipo di errore.

PHP 7.3 e JSON_THROW_ON_ERROR

La RFC JSON_THROW_ON_ERROR accettata con 23 voti a favore prevede l'introduzione del un nuovo flag JSON_THROW_ON_ERROR che, come ci suggerisce il nome, solleva automaticamente un'eccezione in caso di errore.

// Una stringa JSON non valida che dovrebbe restituire un errore
// Abbiamo usato gli apici anziché le virgolette, in JSON è un errore di sintassi
$json = "{'Organization': 'PHP Documentation Team'}";
try {
    $array = json_decode($json, false, 512, JSON_THROW_ON_ERROR);
} catch(\JsonException $exception) {
    echo $exception->getMessage(); //restituirà "Syntax error"
}

Ti consigliamo anche