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

Функция is_integer в PHP: детальный разбор и примеры
Раздел: Работа с переменными
is_integer(mixed $value): bool

Основная информация

Функция is_integer() является псевдонимом функции is_int() в языке PHP. Она используется для проверки типа переменной. Функция определяет, является ли переданное значение целым числом (integer).

Когда применяется функция

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

Аргументы функции

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

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

Функция возвращает true, если $value является целым числом (integer), и false в противном случае.

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

Проверка целочисленных значений
$var = 42;
var_dump(is_integer($var));
bool(true)
Проверка других типов данных
$var = 42.0;
var_dump(is_integer($var));

$var = "42";
var_dump(is_integer($var));

$var = true;
var_dump(is_integer($var));

$var = null;
var_dump(is_integer($var));
bool(false)
bool(false)
bool(false)
bool(false)
Проверка больших чисел
$var = 1_000_000;
var_dump(is_integer($var));
bool(true)

Похожие функции в PHP

  • is_int() - полный аналог функции is_integer(). Между ними нет никакой разницы. is_integer является просто другим именем для is_int.
  • ctype_digit() - проверяет, являются ли все символы в строке цифрами. Ключевое отличие: она работает со строками. ctype_digit("42") вернет true, тогда как is_integer("42") вернет false.
  • filter_var() с фильтром FILTER_VALIDATE_INT - осуществляет более гибкую проверку целых чисел, может проверять диапазоны значений и возвращает само значение при успехе или false при неудаче.
  • gettype() - возвращает тип переменной в виде строки. Сравнение: gettype($var) === 'integer' дает аналогичный результат, но менее производительно и наглядно.
Рекомендации по выбору

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

Распространенные ошибки

Путаница со строковыми числами

Наиболее частая ошибка - ожидание, что функция вернет true для строк, содержащих цифры.

$id = $_GET['id']; // Допустим, значение "123"
if (is_integer($id)) {
    echo "Это целое число.";
} else {
    echo "Это не целое число.";
}
Это не целое число.
Проверка чисел с плавающей точкой

Числа типа float, даже если они выглядят как целые (например, 5.0), не являются типом integer.

$price = 10.00;
var_dump(is_integer($price));
bool(false)
Использование до инициализации переменной
// Переменная $undefined не была объявлена
if (is_integer($undefined)) {
    echo "Прошло проверку.";
}
// Генерируется предупреждение: Undefined variable

Изменения в версиях PHP

Функция is_integer(), как и её аналог is_int(), является стабильной и её поведение не менялось на протяжении многих основных версий PHP. В PHP 8.0 было усилено соблюдение строгости типов в целом, но сама логика работы данной функции осталась прежней. Ранее, в PHP 7.2, улучшена согласованность поведения функций для проверки типов.

Важное уточнение: начиная с PHP 8.0, многие функции стали более строгими в отношении типов аргументов, однако is_integer() по-прежнему принимает значение любого типа.

Расширенные примеры

Использование в пользовательской функции валидации
Пример php
function validateUserId($user_id) {
    if (!is_integer($user_id)) {
        throw new InvalidArgumentException("ID пользователя должно быть целым числом.");
    }
    if ($user_id <= 0) {
        throw new InvalidArgumentException("ID пользователя должно быть положительным числом.");
    }
    return true;
}

try {
    validateUserId(100);
    echo "Валидация прошла успешно.";
} catch (InvalidArgumentException $e) {
    echo "Ошибка: " . $e->getMessage();
}
Валидация прошла успешно.
Сравнение с приведением типа
Пример php
$values = [42, "42", 42.5, 42.0, true, null, []];

foreach ($values as $value) {
    $isInt = is_integer($value);
    $afterCast = (int) $value;
    echo "Значение: ";
    var_dump($value);
    echo "is_integer: " . ($isInt ? 'true' : 'false') . "\n";
    echo "После (int): ";
    var_dump($afterCast);
    echo "---\n";
}
Значение: int(42)
is_integer: true
После (int): int(42)
---
Значение: string(2) "42"
is_integer: false
После (int): int(42)
---
... и так далее
Работа в строгом режиме
Пример php
declare(strict_types=1);

function add(int $a, int $b): int {
    return $a + $b;
}

// Функция is_integer может использоваться для предварительной проверки перед вызовом
$a = 5;
$b = "10";

if (is_integer($a) && is_integer($b)) {
    echo add($a, $b);
} else {
    echo "Оба аргумента должны быть целыми числами.";
}
Оба аргумента должны быть целыми числами.
Проверка элементов массива
Пример php
$data = ['id' => '123', 'count' => 5, 'price' => 9.99];
$integerKeys = [];

foreach ($data as $key => $value) {
    if (is_integer($value)) {
        $integerKeys[] = $key;
    }
}

print_r($integerKeys);
Array
(
    [0] => count
)

Аналоги в других языках

Is integer в Python

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

value = 42
print(isinstance(value, int))
print(type(value) == int)
True
True

Is integer в Javascript

В JavaScript нет отдельной функции. Используют комбинацию typeof и проверок. Метод Number.isInteger() появился в ES6.

let value = 42;
console.log(typeof value === 'number' && isFinite(value) && Math.floor(value) === value);
console.log(Number.isInteger(value));
true
true

Is integer в MySQL

В контексте запросов SQL часто используется проверка через регулярные выражения или функции типа CAST().

-- Проверка, является ли столбец целым числом (пример логики)
SELECT column_name FROM table_name WHERE column_name REGEXP '^[0-9]+$' AND column_name = CAST(column_name AS UNSIGNED);

PHP is_integer function comments

En
Is integer Alias of is_int