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.
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('json_validate(): Argument #2 ($depth) must be greater than 0'); } \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!