Int — это число из множества ℤ = {..., -2, -1, 0, 1, 2, ...}.

int может быть указан в десятичной (по основанию 10), шестнадцатеричной (по основанию 16), восьмеричной (по основанию 8) или двоичной (по основанию 2) записи. Оператор отрицания может использоваться для обозначения отрицательного целого числа .

Чтобы использовать восьмеричное представление, поставьте перед числом 0(ноль). Начиная с PHP 8.1.0, восьмеричной записи также может предшествовать 0oили 0O. Для использования шестнадцатеричной системы счисления перед числом ставится 0x. Чтобы использовать двоичную запись, перед номером ставится 0b.

Начиная с PHP 7.4.0, целочисленные литералы могут содержать знаки подчеркивания ( _) между цифрами для лучшей читаемости литералов. Эти символы подчеркивания удаляются сканером PHP.

Пример #1 Целочисленные литералы

<?php
$a = 1234; // decimal number
$a = 0123; // octal number (equivalent to 83 decimal)
$a = 0o123; // octal number (as of PHP 8.1.0)
$a = 0x1A; // hexadecimal number (equivalent to 26 decimal)
$a = 0b11111111; // binary number (equivalent to 255 decimal)
$a = 1_234_567; // decimal number (as of PHP 7.4.0)
?>

Формально структура для литералов int такая же, как и в PHP 7.4.0 (ранее символы подчеркивания не допускались):

десятичный: [1-9][0-9]*(_[0-9]+)*
            | 0

шестнадцатеричный: 0[xX][0-9a-fA-F]+(_[0-9a-fA-F]+)*

восьмеричное: 0[oO]?[0-7]+(_[0-7]+)*

двоичный: 0[bB][01]+(_[01]+)*

целое: десятичное
            | шестнадцатеричный
            | восьмеричный
            | бинарный

Размер int зависит от платформы, хотя максимальное значение около двух миллиардов является обычным значением (это 32 бита со знаком). 64-битные платформы обычно имеют максимальное значение около 9E18. PHP не поддерживает беззнаковые целые числа. размер int можно определить с помощью константы PHP_INT_SIZE, максимальное значение с помощью константы PHP_INT_MAXи минимальное значение с помощью константы PHP_INT_MIN.

Целочисленное переполнение

Если PHP встретит число, выходящее за пределы типа int , оно будет интерпретировано как число с плавающей запятой . Кроме того, операция, результатом которой является число, выходящее за пределы типа int , вместо этого вернет число с плавающей запятой .

Пример #2 Целочисленное переполнение в 32-битной системе

<?php
$large_number = 2147483647;
var_dump($large_number);                     // int(2147483647)

$large_number = 2147483648;
var_dump($large_number);                     // float(2147483648)

$million = 1000000;
$large_number =  50000 * $million;
var_dump($large_number);                     // float(50000000000)
?>

Пример #3 Целочисленное переполнение в 64-битной системе

<?php
$large_number = 9223372036854775807;
var_dump($large_number);                     // int(9223372036854775807)

$large_number = 9223372036854775808;
var_dump($large_number);                     // float(9.2233720368548E+18)

$million = 1000000;
$large_number =  50000000000000 * $million;
var_dump($large_number);                     // float(5.0E+19)
?>

В PHP нет оператора деления int , для этого используйте функцию intdiv() . 1/2дает поплавок 0.5 . Значение может быть приведено к типу int , чтобы округлить его до нуля, или функция round() обеспечивает более точное управление округлением.

<?php
var_dump(25/7);         // float(3.5714285714286)
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7));  // float(4)
?>

Преобразование в целое число

Чтобы явно преобразовать значение в int , используйте приведение типов (int)или (integer). Однако в большинстве случаев приведение не требуется, поскольку значение будет автоматически преобразовано, если оператору, функции или управляющей структуре требуется аргумент типа int . Значение также можно преобразовать в int с помощью функции intval() .

Если ресурс преобразуется в int , результатом будет уникальный номер ресурса, присвоенный ресурсу PHP во время выполнения.

 

Из логических значений

falseдаст 0(ноль) и trueдаст 1(один).

 

Из чисел с плавающей запятой

При преобразовании из float в int число будет округлено до нуля .

Если число с плавающей запятой выходит за пределы int (обычно +/- 2.15e+9 = 2^31на 32-разрядных платформах и +/- 9.22e+18 = 2^63на 64-разрядных платформах), результат не определен, поскольку точность числа с плавающей запятой недостаточна для получения точного результата типа int . Никакого предупреждения, даже уведомления не будет, когда это произойдет!

Примечание :

NaN и Infinity всегда будут равны нулю при приведении к int .

Предупреждение

Никогда не приводите неизвестную дробь к типу int , так как иногда это может привести к неожиданным результатам.

<?php
echo (int) ( (0.1+0.7) * 10 ); // echoes 7!
?>

 

Из строк

Если строка является числовой или ведущей цифрой, она будет преобразована в соответствующее целочисленное значение, в противном случае она будет преобразована в ноль ( 0).

От NULL

nullвсегда преобразуется в ноль ( 0).

Из других типов

Осторожность

Поведение преобразования в int не определено для других типов. Не полагайтесь на какое-либо наблюдаемое поведение, поскольку оно может измениться без предварительного уведомления.