PHP8.3には新機能が追加されます! (json_validate関数の説明)

藏色散人
リリース: 2023-04-11 09:58:01
転載
2200 人が閲覧しました

この記事では、php8.3 に関する最新の関連情報をお届けします。主に、PHP8.3 に json_validate という関数が追加されることを紹介します。この関数はどのような用途に使われるのでしょうか?それの使い方?一緒に見てみましょう。皆さんのお役に立てれば幸いです。

PHP8.3には新機能が追加されます! (json_validate関数の説明)

PHP 8.3 プレビュー: `json_validate` 関数

PHP 8.3 では、渡された入力が正しいかどうかを検証するための json_validate という名前の関数が追加されます。 string は正当な JSON 文字列です。

現在、JSON 文字列を検証する一般的な方法は、JSON 文字列をデコードし、例外をキャッチして判断することです。ただし、場合によっては、特定のコンテンツを取得する必要はなく、それが合法であることの確認のみが必要な場合もあります。新しい json_validate 関数は、文字列をデコードせずに解析するだけなので、json_decode よりもメモリとリソースの消費が少なくなります。

関数シグネチャ

/**
 * 验证传入的字符串是否为合法 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

json_validate の 3 番目のパラメータは flags で、これは関数の動作を指定するために使用されます。関数 。現在、使用可能なフラグは JSON_INVALID_UTF8_IGNORE のみです。

このフラグは、PHP 7.2 で json_decode のフラグ定数として追加され、対応する文字列内の UTF-8 文字を無視するために使用されます。

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
ログイン後にコピー

エラー処理

json_validate 自体はエラー コードを返しません。特定のエラー情報を取得したい場合は、json_last_error と json_last_error_msg を使用して取得できます。

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"
ログイン後にコピー

文字列を検証して例外をスローします

if (json_validate($_GET['json']) === false) {
    throw new \JsonException(json_last_error_msg(), json_last_error());
}
ログイン後にコピー

前の検証メソッドを置き換えます

- $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']);
ログイン後にコピー

Polyfill のプリエンプティブ適応

PHP 8.3 がリリースされたらすぐに json_validate にシームレスに切り替えることができるように、事前に PHP 8.3 に適応したい場合は、以前のバージョンの json_validate の動作を模倣する関数を手動で定義することができます。

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;  
  }  
}
ログイン後にコピー

この関数は引き続き内部で json_decode を使用するため、実際にはパフォーマンスの向上はありませんが、json_validate に似たインターフェイスが提供されるだけです。

推奨学習: 「PHP ビデオ チュートリアル

以上がPHP8.3には新機能が追加されます! (json_validate関数の説明)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:learnku.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート