Heim  >  Artikel  >  Backend-Entwicklung  >  PHP überschreitet den Shaping-Bereich

PHP überschreitet den Shaping-Bereich

王林
王林Original
2023-05-06 13:58:08939Durchsuche

Die meisten Programmiersprachen haben Einschränkungen hinsichtlich der Variablentypen. Das Überschreiten dieser Grenzwerte führt zu Problemen oder Fehlern bei der Ausführung, und PHP bildet da keine Ausnahme. In PHP liegt der Bereich ganzzahliger Variablen zwischen -2147483648 und 2147483647. Wenn dieser Bereich überschritten wird, tritt das Problem der Überschreitung des Ganzzahlbereichs auf.

Es kann viele Gründe geben, warum der Ganzzahlbereich überschritten wird, wie zum Beispiel:

  1. Zahlenoperationen liegen außerhalb des Bereichs. Wenn beim Addieren zweier Ganzzahlen deren Summe den Maximalwert des Ganzzahltyps überschreitet, führt dies zu einem Problem außerhalb des Bereichs.
  2. Ganzzahlüberlaufproblem. Ein weiterer häufiger Grund für die Überschreitung des Bereichs eines Ganzzahltyps ist, dass der Wert der Variablen selbst den Maximalwert des Ganzzahltyps überschreitet. Dies wird als Ganzzahlüberlauf bezeichnet.
  3. Beim Lesen von Daten aus anderen Systemen oder Schnittstellen sind die Datentypen inkonsistent.

Um das Problem besser zu verstehen, dass PHP den Ganzzahlbereich überschreitet, können wir es anhand des folgenden Beispiels veranschaulichen.

  1. Zahlenoperation außerhalb des Bereichs

Versuchen wir beispielsweise, die Summe zweier Ganzzahlen so zu berechnen, dass das Ergebnis außerhalb des Bereichs des Ganzzahltyps liegt.

$x = 2147483647;
$y = 2;

echo $x + $y; // Das Ausgabeergebnis ist -2147483647

Da das Ergebnis der Addition von $x und $y den Maximalwert von 2147483647 überschreitet, php Behandeln Sie es als negative Zahl und geben Sie das Ergebnis als -2147483647 aus.

  1. Integer-Überlauf

Sie können die Integer-Variable auch manuell auf einen Wert größer als 2147483647 setzen, um das Problem des Integer-Überlaufs zu reproduzieren.

$x = 2147483648;

echo $x; // Das Ausgabeergebnis ist -2147483648

Da 2147483648 größer als der größte ganzzahlige Wert 2147483647 ist, behandelt PHP es als negative Zahl -2147483648.

  1. Inkonsistente Datentypen

Beim Lesen von Daten aus anderen Systemen oder Schnittstellen müssen Sie auf das Problem inkonsistenter Datentypen achten.

Lassen Sie uns beispielsweise numerische Daten aus einer JSON-Datei abrufen.

{"number": 12345678901234567890}

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

echo $number; // Das Ausgabeergebnis ist 12345678901234567890

Da der maximale ganzzahlige Wert in PHP 2147483647 ist und der aus der JSON-Datei gelesene Wert größer als dieser Wert ist, behandelt PHP ihn als Float. statt einer ganzen Zahl.

Zur Lösung des Problems, dass PHP den Ganzzahlbereich überschreitet, gibt es die folgenden Lösungen:

  1. Verwenden Sie eine große Zahlenbibliothek. Wenn Sie Berechnungen durchführen müssen, die über den Bereich ganzer Zahlen hinausgehen, können Sie die von PHP bereitgestellte Bibliothek für große Zahlen wie gmp oder bcmath verwenden. $ Zum Beispiel: $ x = "12345678901234567890";
  2. $ y = "9876543210987654321";

$ SUM = GMP_ADD ($ x, $ y); Das Ergebnis ist: 2222222211222222211


Speichern Sie Ganzzahlen in der Datenbank, anstatt PHP-Variablen zu verwenden . Der Datenbankspeicher kann größere Ganzzahlwerte aufnehmen.

Ändern Sie die PHP-Konfigurationsdatei. Sie können versuchen, die Konfigurationselemente in der PHP-Konfigurationsdatei php.ini zu ändern, z. B. die Verwendung von 64-Bit-Ganzzahlen festzulegen.

    Bei der PHP-Entwicklung ist das Überschreiten des Ganzzahlbereichs ein Problem, das beim Schreiben und Überprüfen des Codes nicht ignoriert werden darf, um das Auftreten solcher Probleme zu verhindern.

Das obige ist der detaillierte Inhalt vonPHP überschreitet den Shaping-Bereich. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn