Is int: примеры (PHP)
is_int(mixed $value): boolФункция 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 существует несколько функций для проверки числовых значений, каждая со своими особенностями.
- 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 8 серьезных изменений в поведении функции is_int() не произошло. Однако общий контекст строгой типизации в языке усилился. В PHP 8 была улучшена система типов и введены строгие режимы для большего числа встроенных функций, что делает проверку типов с помощью is_int() еще более предсказуемой и надежной.
Ранее, в PHP 7, были введены скалярные объявления типов (type declarations), что повысило значимость функций проверки типов, таких как is_int(), для подготовки данных перед передачей в функции с объявленными типами параметров.
<?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' должно быть целым числом.
)<?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
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
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 для проверки типа используется функция isinstance() или прямое сравнение с типом int.
value1 = 42
value2 = "42"
print(isinstance(value1, int)) # True
print(isinstance(value2, int)) # False
print(type(value1) is int) # TrueTrue False True
В 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)); // falsetrue false true false
В контексте запросов проверка типа происходит редко. Однако можно использовать функции для проверки данных, например, REGEXP для проверки строки на содержание только цифр.
SELECT '123' REGEXP '^[0-9]+$' AS is_integer_like; -- 1 (true)is_integer_like 1