W3docs

is_int()

Функция is_int() в PHP проверяет, является ли переменная целым числом. Узнайте синтаксис, примеры и отличия от is_numeric().

Введение

Функция is_int() — встроенная функция PHP, которая проверяет, имеет ли переменная тип integer. Целое число — это число без дробной части, например -7, 0 или 42.

Ключевое слово здесь — тип: is_int() смотрит на то, как значение хранится в памяти, а не на то, как оно выглядит. Строка "42" и число с плавающей точкой 42.0 оба выглядят как целые числа для человека, но для PHP это строка и float, поэтому is_int() вернёт false для обоих. Именно это делает функцию полезной для строгой валидации и именно это чаще всего вызывает путаницу.

У is_int() есть два идентичных псевдонима — is_integer() и is_long() — которые можно встретить в старом коде. В новом коде предпочтительнее использовать is_int().

Синтаксис

is_int(mixed $value): bool
ПараметрОписание
$valueПеременная для проверки.

Возвращаемое значение: true, если $value имеет тип int, иначе false.

Примечание: is_int() никогда не преобразует значение и не вызывает ошибку — она только проверяет существующий тип. Чтобы преобразовать значение в целое число, используйте intval() или приведение (int).

Базовый пример

php— editable, runs on the server

Здесь $var1 содержит целое число, поэтому is_int() возвращает true. $var2 — строка, поэтому возвращается false.

Мы намеренно используем var_dump() вместо echo. Когда вы используете echo для boolean, true печатается как "1", а false — как пустая строка, поэтому echo is_int($var2) не выведет ничего, что легко неправильно истолковать. var_dump() явно печатает тип и значение, делая результат однозначным.

Что считается целым числом (а что нет)

Самый распространённый сюрприз заключается в том, что число, записанное в кавычках, является строкой, а не целым числом:

<?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)
?>

Обратите внимание на 42.0: у него нет дробной части, но оно хранится как float, поэтому is_int() возвращает false. Если вы хотите проверить «является ли это целым числом независимо от типа», вам нужна другая проверка (см. ниже).

Осторожно: переполнение целого числа превращается в float

Целые числа PHP имеют максимальный размер (PHP_INT_MAX). Когда вычисление превышает это значение, PHP молча преобразует результат в float, и is_int() возвращает false:

<?php
var_dump(is_int(PHP_INT_MAX));     // bool(true)
var_dump(is_int(PHP_INT_MAX + 1)); // bool(false) — overflowed to float
?>

Это важно при валидации пользовательских чисел, которые могут быть очень большими.

Проверка числовых строк вместо этого

Если ваше значение приходит из формы, URL или базы данных, оно почти всегда является строкой — поэтому is_int() вернёт false даже для "42". В таких случаях обычно используют одно из следующего:

  • is_numeric()true как для числовых строк, так и для чисел ("42", 42, 3.14).
  • ctype_digit()true только для строк, состоящих полностью из цифровых символов.
  • Фильтрационная валидация — filter_var($value, FILTER_VALIDATE_INT) возвращает целое число или false.
<?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)
?>

Когда использовать

Используйте is_int(), когда вам нужна строгая гарантия типа — например, чтобы убедиться, что внутреннее значение действительно является целым числом, прежде чем использовать его в качестве индекса массива, границы цикла или аргумента кода, который ожидает целые числа:

<?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
?>

Для валидации необработанных входных данных используйте is_numeric() или filter_var(), а затем выполняйте приведение к int.

Связанные функции

  • is_float() — проверка типа float.
  • is_string() — проверка типа string.
  • is_bool() — проверка типа boolean.
  • is_array() — проверка типа array.
  • is_numeric() — проверка числа или числовой строки.
  • gettype() — получение имени типа в виде строки.
  • intval() — преобразование значения в целое число.

Заключение

is_int() проверяет, хранится ли переменная как целое число, а не просто выглядит ли она как таковое. Помните о подводных камнях: числа в кавычках являются строками, числа с плавающей точкой с целым значением, например 42.0, являются float, а целые числа, превышающие PHP_INT_MAX, становятся float. Используйте is_int() для строгих внутренних проверок типов и is_numeric() или filter_var() при валидации строк от пользователей.

Практика

Практика
Какое(ие) из следующих утверждений об функции is_int() в PHP является(ются) верным(и)?
Какое(ие) из следующих утверждений об функции is_int() в PHP является(ются) верным(и)?
Was this page helpful?