Is int: примеры (PHP)

Руководство по применению функции is_int в PHP 8
Раздел: Работа с переменными
is_int(mixed $value): bool
Основные сведения о is_int

Функция is_int() в языке PHP предназначена для проверки, является ли переменная значением целочисленного типа (integer). Эта функция возвращает true, если проверяемое значение принадлежит к типу integer, и false в противном случае.

Использование функции актуально в ситуациях, когда требуется строгая проверка типа данных, например, при валидации пользовательского ввода, обработке данных из форм или API, а также при обеспечении корректности работы математических операций.

Синтаксис и параметры

Синтаксис функции предельно прост:

bool is_int(mixed $value)

Функция принимает один обязательный параметр:

  • $value (mixed) – проверяемое значение. Может быть любого типа.

Возвращаемое значение имеет тип boolean.

Простые примеры использования

Рассмотрим базовые случаи проверки разных типов данных.

Проверка целых чисел
<?php
$var1 = 42;
$var2 = -100;
$var3 = 0;

var_dump(is_int($var1)); // bool(true)
var_dump(is_int($var2)); // bool(true)
var_dump(is_int($var3)); // bool(true)
?>
bool(true)
bool(true)
bool(true)
Проверка нецелочисленных значений
<?php
$var4 = 42.5;
$var5 = "42";
$var6 = true;
$var7 = null;
$var8 = [];

var_dump(is_int($var4)); // bool(false)
var_dump(is_int($var5)); // bool(false)
var_dump(is_int($var6)); // bool(false)
var_dump(is_int($var7)); // bool(false)
var_dump(is_int($var8)); // bool(false)
?>
bool(false)
bool(false)
bool(false)
bool(false)
bool(false)
Похожие функции в PHP

В PHP существует несколько функций для проверки числовых значений, каждая со своими особенностями.

  • is_numeric() – проверяет, является ли переменная числом или строкой, содержащей число. Возвращает true для строк "123" и чисел с плавающей точкой. is_int() более строгая, так как требует именно тип integer.
  • ctype_digit() – проверяет, все ли символы в строке являются цифрами. Работает только со строками. Для числа типа integer вернет false, поэтому перед проверкой часто требуется приведение к строке.
  • filter_var() с фильтром FILTER_VALIDATE_INT – мощный инструмент валидации, который может дополнительно проверять диапазон значений. Возвращает само число при успехе или false. Может обрабатывать строки с числами.

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

Типичные ошибки

Наиболее частая ошибка – путаница между значением и типом. Функция is_int() проверяет именно тип переменной, а не то, можно ли ее привести к целому числу.

Ошибка со строковым представлением числа
<?php
$user_input = $_POST['age']; // Допустим, пользователь ввел "25"

if (is_int($user_input)) {
    echo "Возраст корректен (целое число).";
} else {
    echo "Проверка is_int не пройдена, так как входные данные - строка.";
}
?>
Проверка is_int не пройдена, так как входные данные - строка.

В этом случае данные из формы всегда приходят как строки. Правильнее использовать filter_var($user_input, FILTER_VALIDATE_INT).

Ошибка с большими числами
<?php
$bigNumber = 999999999999999999999; // Это число может быть интерпретировано как float
var_dump($bigNumber);
var_dump(is_int($bigNumber));
?>
float(1.0E+21)
bool(false)

Числа, выходящие за пределы допустимого диапазона для типа integer на данной платформе, автоматически преобразуются в float, поэтому is_int() вернет false.

Изменения в последних версиях PHP

В PHP 8 серьезных изменений в поведении функции is_int() не произошло. Однако общий контекст строгой типизации в языке усилился. В PHP 8 была улучшена система типов и введены строгие режимы для большего числа встроенных функций, что делает проверку типов с помощью is_int() еще более предсказуемой и надежной.

Ранее, в PHP 7, были введены скалярные объявления типов (type declarations), что повысило значимость функций проверки типов, таких как is_int(), для подготовки данных перед передачей в функции с объявленными типами параметров.

Расширенные примеры использования
Валидация входящих данных массива
Пример php
<?php
$data = ['id' => '150', 'count' => 3, 'price' => 19.99];
$errors = [];

if (!is_int($data['id'])) {
    $errors[] = "Поле 'id' должно быть целым числом.";
}
if (!is_int($data['count'])) {
    $errors[] = "Поле 'count' должно быть целым числом.";
}
// Для price is_int не подойдет, так как это float

print_r($errors);
?>
Array
(
    [0] => Поле 'id' должно быть целым числом.
)
Работа с JSON и декодированием чисел
Пример php
<?php
$jsonString = '{"product_id": 1001, "quantity": "5"}';
$arrayData = json_decode($jsonString, true);

// json_decode с параметром assoc=true возвращает массив.
// Числа, которые в JSON не в кавычках, становятся integer/float в PHP.
var_dump(is_int($arrayData['product_id'])); // true
var_dump(is_int($arrayData['quantity']));   // false, потому что в JSON было в кавычках
?>
bool(true)
bool(false)
Использование в комбинации с приведением типов
Пример php
<?php
function ensureInteger($value) {
    if (is_numeric($value)) {
        // Если значение числовое (число или числовая строка), приводим к int
        $intValue = (int) $value;
        // После приведения проверяем тип
        if (is_int($intValue)) {
            return $intValue;
        }
    }
    return null; // или выбросить исключение
}

$val1 = ensureInteger("42");
$val2 = ensureInteger(42.0);
$val3 = ensureInteger("abc");

var_dump($val1, $val2, $val3);
?>
int(42)
int(42)
NULL
Проверка типа перед строгой математической операцией
Пример php
<?php
declare(strict_types=1);

function calculateFactorial($n) {
    if (!is_int($n)) {
        throw new TypeError("Аргумент должен быть целым числом.");
    }
    if ($n < 0) {
        throw new InvalidArgumentException("Аргумент не может быть отрицательным.");
    }
    $result = 1;
    for ($i = 2; $i <= $n; $i++) {
        $result *= $i;
    }
    return $result;
}

try {
    echo calculateFactorial(5) . "\n";
    echo calculateFactorial("5"); // Вызовет TypeError
} catch (TypeError $e) {
    echo "Ошибка типа: " . $e->getMessage();
}
?>
120
Ошибка типа: Аргумент должен быть целым числом.
Аналоги в других языках программирования
Python

В Python для проверки типа используется функция isinstance() или прямое сравнение с типом int.

value1 = 42
value2 = "42"

print(isinstance(value1, int))  # True
print(isinstance(value2, int))  # False
print(type(value1) is int)      # True
True
False
True
JavaScript

В JavaScript строгой аналогии нет из-за динамической типизации. Часто используют Number.isInteger(), который не выполняет приведение типов.

console.log(Number.isInteger(42));    // true
console.log(Number.isInteger("42"));  // false
console.log(Number.isInteger(42.0));  // true
console.log(Number.isInteger(42.5));  // false
true
false
true
false
MySQL

В контексте запросов проверка типа происходит редко. Однако можно использовать функции для проверки данных, например, REGEXP для проверки строки на содержание только цифр.

SELECT '123' REGEXP '^[0-9]+$' AS is_integer_like; -- 1 (true)
is_integer_like
1

PHP is_int function comments

En
Is int Find whether the type of a variable is integer