この記事では、php8.3 に関する最新の関連情報をお届けします。主に、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('json_validate(): Argument #2 ($depth) must be greater than 0'); } \json_decode($json, null, $depth, $flags); return \json_last_error() === \JSON_ERROR_NONE; } }
この関数は引き続き内部で json_decode を使用するため、実際にはパフォーマンスの向上はありませんが、json_validate に似たインターフェイスが提供されるだけです。
推奨学習: 「PHP ビデオ チュートリアル 」
以上がPHP8.3には新機能が追加されます! (json_validate関数の説明)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。