W3docs

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
ParameterBeschreibung
$valueDie 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, verwende intval() oder einen (int)-Cast.

Einfaches Beispiel

php— editable, runs on the server

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 stringecho 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()true für numerische strings und Zahlen ("42", 42, 3.14).
  • ctype_digit()true nur für strings, die ausschließlich aus Ziffern bestehen.
  • Filter-Validierung — filter_var($value, FILTER_VALIDATE_INT) gibt den Integer oder false zurü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

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.

Übung

Übung
Welche der folgenden Aussagen ist/sind wahr über die Funktion is_int() in PHP?
Welche der folgenden Aussagen ist/sind wahr über die Funktion is_int() in PHP?
Was this page helpful?