Bei der Prüfung von Usereingaben sollte man Zahlen auch dahingehend vergleichen, ob diese auch noch überhaupt im erlaubten Bereich liegen.
Nach oben kein Problem
Ob eine Zahl zu gross wird kann man relativ leicht mit PHP-Bordmitteln feststellen.
if (PHP_INT_MAX<=$meineZahl) {
//...
}>
Damit läßt sich schnell und einfach feststellen, ob eine Zahl den erlaubten Integer-Höchstwert von 2147483647 übertrifft oder eben nicht.
Interessant ist übrigens, dass Zahlen, die über PHP_INT_MAX hinausgehen zu einem Float werden – somit könnte man auch entsprechend den Datentyp vergleichen und darüber dann eine Schlussfolgerung ziehen. Man kann weiterhin ganz normale Größenvergleiche durchführen, allerdings sollte man bei der Nutzung von Filterfunktionen aufpassen:
$ergebnis = filter_var($variable,FILTER_SANITIZE_NUMBER_INT);
Das Beispiel liefert dann keinen Integer mehr, sobald $variable größer PHP_INT_MAX wird und somit könnten entsprechende Vergleiche fehlschlagen.
Eine entsprechende Max-Funktion für Float – PHP_FLOAT_MAX – gibt es leider nicht.
Ein Blick nach unten
Nun könnte man meinen, es gäbe auch ein PHP_INT_MIN, doch #meep#, leider nicht. Warum auch immer: Es gibt keine entsprechende Min-Funktion für Integer!
Kurios wird auch das verhalten des Typs, wenn man sich der Untergrenze des Int-Bereiches nähert. Während man nach oben recht einfach prüfen kann, ob man sich im normalen Bereich aufhält – ob nun durch PHP_INT_MAX oder eine Typprüfung auf int bzw. float – ist das im negativen Zahlenbereich so eine Sache, aber erstmal etwas Code:
$minzahl = -2147483647;
var_dump($minzahl);
var_dump($minzahl-1);
$minzahl = -2147483648;
var_dump($minzahl);
var_dump($minzahl-1);
Das Ergebnis?
int(-2147483647)
int(-2147483648)
float(-2147483648)
float(-2147483649)
Wie man sieht, ist sich PHP nicht so ganz einig, welchen Datentyp denn nun die Zahl –2147483648 hat, Integer oder Float – vielmehr kann in diesem Grenzbereich auch keine Aussage treffen, ob man nun den Bereich unterschreitet oder nicht – zumindest nicht ohne Zuhilfenahme einer Konstanten.