Тип int: основные операции и примеры

Раздел: Основы программирования на PHP -> Типы данных в PHP

Целочисленный тип данных 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); // 12345678901234567891

Php 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

Тип int в PHP - comments

En
Php type int (php)