Тип int: основные операции и примеры
Целочисленный тип данных int в PHP
Целочисленный тип (int) в PHP представляет целые числа без дробной части. Это один из основных скалярных типов. Переменной можно присвоить целое число напрямую:
$age = 25;
$count = -10;
$hex = 0x1A; // шестнадцатеричное (26)
$octal = 077; // восьмеричное (63)
$binary = 0b1101; // двоичное (13)Php mime type (mime-типы в php)
PHP автоматически определяет тип int при присвоении целого литерала. Размер int зависит от архитектуры: на 32-битных системах диапазон от –2 147 483 648 до 2 147 483 647, на 64-битных – от –9 223 372 036 854 775 808 до 9 223 372 036 854 775 807. Константы PHP_INT_MAX, PHP_INT_MIN, PHP_INT_SIZE содержат соответствующие значения.
Как преобразовать строку в целое число?
Для явного преобразования используется приведение типа (int) или (integer), а также функция intval(). Пример:
$str = "42 years";
$num = (int) $str; // 42
$num2 = intval($str); // 42
$float = 3.99;
$int = (int) $float; // 3 (отбрасывается дробная часть)Of type string is deprecated php (предупреждение об устаревании типа string в php)
Проблема: При преобразовании строки вида "123abc" получится 123, но "abc123" даст 0. Также важно учитывать, что булево true преобразуется в 1, false в 0, null в 0.
Как проверить, является ли переменная целым числом?
Используйте функцию is_int() или is_integer():
$value = 10;
if (is_int($value)) {
echo "Целое число";
}
$value2 = "10";
var_dump(is_int($value2)); // bool(false)Php check type (проверка типа переменной в php)
Также можно использовать ctype_digit() для строк, если нужно проверить, состоит ли строка только из цифр:
$str = "12345";
var_dump(ctype_digit($str)); // bool(true)Strict type php (строгая типизация в php)
Ошибка: is_int() возвращает false для строк, даже если строка содержит число. Поэтому перед проверкой из БД или форм стоит сначала привести тип.
Как получить целую часть от деления?
Для целочисленного деления без остатка используется функция intdiv() (доступна с PHP 7):
$result = intdiv(10, 3); // 3
// Обычное деление вернёт float: 10/3 = 3.333...Php type int (тип int в php)
Также можно округлить вниз через floor() для положительных чисел или привести к int. intdiv() выбрасывает DivisionByZeroError при делении на ноль.
Проблема: При использовании (int) для деления с отрицательными числами результат может быть неожиданным:
echo (int) (-10 / 3); // -3 (отбрасывание дробной части, то же что и intdiv)Php return types (типы возвращаемых значений в php)
Как обработать переполнение целого числа?
В PHP 8 при переполнении int автоматически преобразуется в float. Например:
$big = PHP_INT_MAX + 1;
var_dump($big); // float(9.2233720368548E+18)Php 7 types (типы данных в php 7)
Для работы с очень большими целыми числами без потери точности используется расширение GMP (GNU Multiple Precision) или BCMath:
$a = gmp_init("12345678901234567890");
$b = gmp_add($a, "1");
echo gmp_strval($b); // 12345678901234567891Php set type (функция settype() в php)
Проблема: Если не учитывать переполнение, можно получить некорректные результаты при сравнении чисел. Используйте gmp_cmp() для безопасного сравнения больших чисел.
Как отфильтровать целое число из пользовательского ввода?
PHP предоставляет фильтр FILTER_VALIDATE_INT:
$input = "42";
$options = ['options' => ['min_range' => 0, 'max_range' => 100]];
$filtered = filter_var($input, FILTER_VALIDATE_INT, $options);
if ($filtered === false) {
echo "Невалидное целое";
} else {
echo $filtered; // 42
}Php number type (числовые типы в php)
Этот фильтр возвращает int или false, если значение не прошло проверку. Можно задать диапазон.
Ошибка: Фильтр отвергнет строку "42abc", даже если она начинается с числа. Для извлечения числа из строки сначала используйте (int) или intval().
Как использовать побитовые операции с целыми числами?
PHP поддерживает побитовые операторы: & (И), | (ИЛИ), ^ (XOR), ~ (НЕ), << (сдвиг влево), >> (сдвиг вправо). Примеры:
$a = 5; // 0101
$b = 3; // 0011
echo $a & $b; // 1 (0001)
echo $a | $b; // 7 (0111)
echo $a ^ $b; // 6 (0110)
echo ~$a; // -6 (в зависимости от разрядности)
echo $a << 2; // 20 (010100)
echo $a >> 1; // 2 (0010)
Проблема: На 32-битных системах сдвиг больших чисел может дать неожиданные результаты. Всегда проверяйте разрядность с помощью PHP_INT_SIZE.
Как задать тип int через settype?
Функция settype() изменяет тип переменной на месте:
$var = "123";
settype($var, "integer");
echo $var; // 123, тип int
Это может быть удобно, когда нужно изменить тип в цикле или при работе с массивами.
Ошибка: Если преобразование невозможно, settype() не меняет тип и возвращает false. Обязательно проверяйте результат.
Расширенные примеры работы с int в PHP
1. Явное приведение типов и ловушки
// Преобразование из разных систем счисления
$hex = (int) "0x1F"; // 31 (PHP распознаёт префикс)
$oct = (int) "077"; // 63
$bin = (int) "0b1010"; // 10
Результат: 31, 63, 10
Важно: Если строка начинается с нецифрового символа, приведение даст 0, но не вызовет ошибку.
2. Деление с остатком и модуль
$a = 17;
$b = 5;
echo "Деление: " . ($a / $b) . "\n";
echo "Целая часть: " . intdiv($a, $b) . "\n";
echo "Остаток: " . ($a % $b) . "\n";
echo "Отрицательный модуль: " . (-17 % 5); // -2 (в PHP знак сохраняется)
Деление: 3.4 Целая часть: 3 Остаток: 2 Отрицательный модуль: -2
3. Проверка на целое число с учётом переполнения
function is_safe_int($value) {
if (!is_numeric($value)) return false;
$int = (int) $value;
return (string) $int === (string) $value;
}
echo is_safe_int(123); // true
echo is_safe_int(123.0); // false (строгое сравнение)
echo is_safe_int("1e10"); // false (научная нотация)
4. Использование BCMath для точных вычислений
$a = "12345678901234567890";
$b = "98765432109876543210";
$sum = bcadd($a, $b);
$prod = bcmul($a, $b);
echo "Сумма: $sum\n";
echo "Произведение: $prod\n";
Сумма: 111111111011111111100 Произведение: 1219326311370217952261850327688092900
5. Побитовые флаги
define('READ', 1); // 0001
define('WRITE', 2); // 0010
define('EXEC', 4); // 0100
$permissions = READ | WRITE; // 0011 (3)
if ($permissions & READ) echo "Чтение разрешено\n";
if ($permissions & EXEC) echo "Выполнение разрешено"; else echo "Выполнение запрещено";
Чтение разрешено Выполнение запрещено
6. Обработка больших чисел с GMP
$factorial = gmp_fact(100);
echo gmp_strval($factorial);
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
7. Использование filter_var с пользовательскими опциями
$input = '42';
$options = [
'options' => [
'min_range' => 1,
'max_range' => 100,
'default' => 0
],
'flags' => FILTER_FLAG_ALLOW_OCTAL | FILTER_FLAG_ALLOW_HEX
];
$filtered = filter_var($input, FILTER_VALIDATE_INT, $options);
var_dump($filtered);
int(42)
8. Преобразование между разными системами счисления
$decimal = 255;
echo "Шестнадцатеричное: " . dechex($decimal) . "\n";
echo "Восьмеричное: " . decoct($decimal) . "\n";
echo "Двоичное: " . decbin($decimal) . "\n";
echo "Обратно из шестнадцатеричного: " . hexdec("FF") . "\n";
Шестнадцатеричное: ff Восьмеричное: 377 Двоичное: 11111111 Обратно из шестнадцатеричного: 255