is_int()
Die Funktion is_int() prüft in PHP, ob eine Variable vom Typ Integer ist, und gibt einen boolean Wert zurück.
Einführung
Die Funktion is_int() ist eine eingebaute PHP-Funktion, die angibt, ob eine Variable vom Typ Integer ist. Ein Integer ist eine ganze Zahl (ohne Dezimalanteil) wie -7, 0 oder 42.
Das entscheidende Wort ist Typ: is_int() betrachtet, wie der Wert im Speicher abgelegt ist, nicht wie er aussieht. Der string "42" und der float 42.0 sehen für einen Menschen zwar wie ganze Zahlen aus, für PHP sind sie jedoch ein string und ein float — daher gibt is_int() für beide false zurück. Das macht die Funktion nützlich für strikte Validierung, ist aber auch der häufigste Stolperstein.
is_int() hat zwei identische Aliasse — is_integer() und is_long() —, die man in älterem Code antreffen kann. In neuem Code sollte is_int() bevorzugt werden.
Syntax
is_int(mixed $value): bool| Parameter | Beschreibung |
|---|---|
$value | Die zu prüfende Variable. |
Rückgabewert: true, wenn $value vom Typ int ist, andernfalls false.
Hinweis:
is_int()konvertiert den Wert niemals und löst keinen Fehler aus — es prüft nur den vorhandenen Typ. Um einen Wert in einen Integer zu konvertieren, verwendeintval()oder einen(int)-Cast.
Einfaches Beispiel
Hier enthält $var1 einen Integer, daher gibt is_int() true zurück. $var2 ist ein string, daher gibt es false zurück.
Wir verwenden absichtlich var_dump() statt echo. Wenn man einen boolean mit echo ausgibt, erscheint true als "1" und false als leerer string — echo is_int($var2) zeigt also gar nichts an, was leicht zu Missverständnissen führen kann. var_dump() gibt Typ und Wert explizit aus und macht das Ergebnis eindeutig.
Was als Integer zählt (und was nicht)
Die häufigste Überraschung ist, dass eine in Anführungszeichen geschriebene Zahl ein string ist, kein Integer:
<?php
var_dump(is_int(42)); // bool(true) — integer literal
var_dump(is_int("42")); // bool(false) — numeric string, not an int
var_dump(is_int(42.0)); // bool(false) — float, even though it has no fraction
var_dump(is_int(0x1A)); // bool(true) — hex literal 26 is still an int
var_dump(is_int(true)); // bool(false) — a bool is not an int
var_dump(is_int(null)); // bool(false)
?>Beachte 42.0: Es hat keinen Nachkommaanteil, wird aber als float gespeichert, daher ist is_int() false. Wenn man prüfen möchte, ob es sich um eine ganze Zahl unabhängig vom Typ handelt, benötigt man eine andere Prüfung (siehe unten).
Achtung: Integer-Überlauf wird zu einem float
PHP-Integer haben eine maximale Größe (PHP_INT_MAX). Wenn eine Berechnung diesen Wert überschreitet, konvertiert PHP das Ergebnis stillschweigend in einen float, und is_int() gibt dann false zurück:
<?php
var_dump(is_int(PHP_INT_MAX)); // bool(true)
var_dump(is_int(PHP_INT_MAX + 1)); // bool(false) — overflowed to float
?>Dies ist wichtig bei der Validierung von benutzerdefinierten Zahlen, die sehr groß sein können.
Stattdessen numerische strings prüfen
Wenn ein Wert aus einem Formular, einer URL oder einer Datenbank stammt, ist er fast immer ein string — daher gibt is_int() selbst für "42" false zurück. In diesen Fällen sind üblicherweise folgende Alternativen besser geeignet:
is_numeric()—truefür numerische strings und Zahlen ("42",42,3.14).ctype_digit()—truenur für strings, die ausschließlich aus Ziffern bestehen.- Filter-Validierung —
filter_var($value, FILTER_VALIDATE_INT)gibt den Integer oderfalsezurück.
<?php
$fromForm = "42"; // string, as form input always is
var_dump(is_int($fromForm)); // bool(false)
var_dump(filter_var($fromForm, FILTER_VALIDATE_INT)); // int(42)
?>Wann verwenden
Verwende is_int(), wenn du eine strikte Typgarantie benötigst — zum Beispiel um sicherzustellen, dass ein interner Wert wirklich ein Integer ist, bevor er als Array-Index, Schleifengrenze oder Argument für Code verwendet wird, der Integer voraussetzt:
<?php
function repeat(string $text, int $times): string
{
// Defensive guard: reject anything that isn't a real int.
if (!is_int($times) || $times < 0) {
return $text;
}
return str_repeat($text, $times);
}
echo repeat("ab", 3) . "\n"; // ababab
?>Für die Validierung von Roheingaben greife stattdessen auf is_numeric() oder filter_var() zurück und caste dann zu int.
Verwandte Funktionen
is_float()— prüft auf den float-Typ.is_string()— prüft auf den string-Typ.is_bool()— prüft auf den boolean-Typ.is_array()— prüft auf den array-Typ.is_numeric()— prüft auf eine Zahl oder einen numerischen string.gettype()— gibt den Typnamen als string zurück.intval()— konvertiert einen Wert in einen Integer.
Fazit
is_int() prüft, ob eine Variable als Integer gespeichert ist, nicht ob sie lediglich wie eine aussieht. Beachte die Stolperfallen: Zahlen in Anführungszeichen sind strings, floats mit ganzzahligem Wert wie 42.0 sind floats, und Integer, die PHP_INT_MAX überschreiten, werden zu floats. Verwende is_int() für strikte interne Typprüfungen und is_numeric() oder filter_var() bei der Validierung von Benutzereingaben als strings.