ホームページ >バックエンド開発 >PHPの問題 >php が整形範囲を超えています

php が整形範囲を超えています

王林
王林オリジナル
2023-05-06 13:58:08969ブラウズ

ほとんどのプログラミング言語には変数の型に制限があり、これらの制限を超えると実行上の問題やエラーが発生しますが、PHP も例外ではありません。 PHP では、整数変数の範囲は -2147483648 ~ 2147483647 です。この範囲を超えると整数範囲を超える問題が発生します。

整数型の範囲を超えるには、次のようなさまざまな理由が考えられます。

  1. 数値演算が範囲を超えています。 2 つの整数を加算する場合、その合計が整数型の最大値を超えると、範囲外の問題が発生します。
  2. 整数オーバーフローの問題。整数型の範囲を超えるもう 1 つの一般的な理由は、変数の値自体が整数型の最大値を超えることです。これは整数オーバーフローと呼ばれます。
  3. 他のシステムまたはインターフェイスからデータを読み取る場合、データ型が一致しません。

PHP が整数の範囲を超える問題をよりよく理解するために、次の例で説明します。

  1. 範囲外の数値演算

たとえば、結果が整数型の範囲外になるように 2 つの整数の合計を計算してみます。

$x = 2147483647;
$y = 2;

echo $x $y; // 出力結果は -2147483647

$x と$y 追加された結果は最大値 2147483647 を超えるため、PHP はそれを負の数として扱い、結果を -2147483647 として出力します。

  1. 整数オーバーフロー

整数変数を 2147483647 より大きい値に手動で設定して、整数オーバーフローの問題を再現することもできます。

$x = 2147483648;

echo $x; //出力結果は -2147483648

2147483648 は最大の整数値 2147483647 より大きいため、PHP はこれを次のように扱います。負の数 -2147483648。

  1. 一貫性のないデータ型

他のシステムまたはインターフェイスからデータを読み取るときは、一貫性のないデータ型の問題に注意する必要があります。

たとえば、json ファイルから数値データを取得してみましょう。

{"数値": 12345678901234567890}

$json = file_get_contents("/path/to/json/file.json");
$data = json_decode($json, true );
$number = $data["number"];

echo $number; //PHP の最大整数値は 2147483647 であるため、出力結果は 12345678901234567890

となります。 json ファイル内の値がこの値より大きい場合、PHP はそれを整数ではなく浮動小数点として扱います。

PHP が整数の範囲を超える問題の解決方法については、次のような解決方法があります。

  1. 大きな数のライブラリを使用する。整数の範囲を超える計算を実行する必要がある場合は、gmp や bcmath など、PHP が提供する大規模な数値ライブラリを使用できます。

例:

$x = "12345678901234567890";
$y = "9876543210987654321";

$sum = gmp_add($x, $ y );
echo gmp_strval($sum); // 出力結果は次のとおりです: 22222222112222222211

  1. PHP 変数を使用する代わりに、整数をデータベースに保存します。データベース ストレージは、より大きな整数値を収容できます。
  2. php 設定ファイルを変更します。 64 ビット整数の使用を設定するなど、PHP 構成ファイル php.ini 内の構成項目を変更してみることができます。

PHP 開発では、整数の範囲を超えることは無視できない問題であるため、コード作成時やコードレビュー時には、このような問題が発生しないように特別な注意を払う必要があります。

以上がphp が整形範囲を超えていますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。