Maison >développement back-end >tutoriel php >PHP8.3 aura de nouvelles fonctions ! (description de la fonction json_validate)

PHP8.3 aura de nouvelles fonctions ! (description de la fonction json_validate)

藏色散人
藏色散人avant
2023-01-12 10:10:482259parcourir

Cet article vous apporte les dernières informations pertinentes sur php8.3. Il introduit principalement que PHP8.3 ajoutera une fonction appelée json_validate. Alors, à quoi sert cette fonction ? Comment l'utiliser ? Jetons-y un coup d'œil ensemble, j'espère que cela sera utile à tout le monde.

PHP8.3 aura de nouvelles fonctions ! (description de la fonction json_validate)

Aperçu PHP 8.3 : fonction `json_validate`

PHP 8.3 ajoutera une fonction nommée json_validate pour vérifier si la chaîne entrante est une chaîne JSON légale.

Actuellement, une manière courante de valider une chaîne JSON consiste à essayer de la décoder et de la déterminer en interceptant une exception. Mais dans certains cas, nous n’avons pas besoin d’obtenir un contenu spécifique, mais seulement de vérifier qu’il est légal. La nouvelle fonction json_validate consomme moins de mémoire et de ressources que json_decode car elle analyse uniquement la chaîne sans essayer de la décoder.

Signature de fonction

/**
 * 验证传入的字符串是否为合法 JSON 字符串
 *
 * @param string $json 准备验证的字符串
 * @param int $depth 最大嵌套深度,必须大于 0
 * @param int $flags 标志掩码,用于指定行为
 * @return bool $json 是合法 JSON 字符串时返回 true,否则返回 false
 */
function json_validate(string $json, int $depth = 512, int $flags = 0): bool {}

Flags Flags

Le troisième paramètre de json_validate est flags, qui est utilisé pour spécifier le comportement de la fonction. Actuellement, le seul indicateur disponible est JSON_INVALID_UTF8_IGNORE.

Cet indicateur a été ajouté dans PHP 7.2 en tant que constante d'indicateur de json_decode, utilisé pour ignorer les caractères UTF-8 dans la chaîne correspondante.

json_validate('[1, 2, 3]', flags: JSON_INVALID_UTF8_IGNORE); // true

json_validate("[\"\xc1\xc1\",\"a\"]"); // false
json_validate("[\"\xc1\xc1\",\"a\"]", flags: JSON_INVALID_UTF8_IGNORE); // true

Gestion des erreurs

json_validate lui-même ne renvoie pas de code d'erreur Si vous souhaitez obtenir des informations d'erreur spécifiques, vous pouvez utiliser json_last_error et json_last_error_msg pour les obtenir.

json_validate(""); // false

json_last_error(); // 4
json_last_error_msg(); // "Syntax error"
json_validate("null"); // true

json_last_error(); // 0
json_last_error_msg(); // "No error"

Exemple

Vérifiez la chaîne et lancez une exception

if (json_validate($_GET['json']) === false) {
    throw new \JsonException(json_last_error_msg(), json_last_error());
}

Remplacez la méthode de vérification précédente

- $value = json_decode($_GET['json'], flags: JSON_THROW_ON_ERROR);
+ if (!json_validate($_GET['json'])) {
+   throw new \JsonException(json_last_error_msg(), json_last_error());
+ }
+ $value = json_decode($_GET['json']);

Adaptation préemptive Polyfill

Si vous souhaitez vous adapter à PHP 8 .3 à l'avance, pour en toute transparence En passant à json_validate dès la sortie de la version 8.3, vous pouvez définir manuellement une fonction pour imiter l'effet de json_validate dans les versions précédentes.

if (!function_exists('json_validate')) {  
  function json_validate(string $json, int $depth = 512, int $flags = 0): bool {  
  if ($flags !== 0 && $flags !== \JSON_INVALID_UTF8_IGNORE) {  
  throw new \ValueError('json_validate(): Argument #3 ($flags) must be a valid flag (allowed flags: JSON_INVALID_UTF8_IGNORE)');  
  }  
  if ($depth <= 0 ) {  
  throw new \ValueError(&#39;json_validate(): Argument #2 ($depth) must be greater than 0&#39;);  
  }  
  \json_decode($json, null, $depth, $flags);  
  return \json_last_error() === \JSON_ERROR_NONE;  
  }  
}

Étant donné que cette fonction utilise toujours json_decode en interne, elle n'a en fait aucune amélioration des performances, mais fournit uniquement une interface similaire à json_validate.

Apprentissage recommandé : "Tutoriel vidéo PHP"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer