Целые числа int — это число из множества ℤ = {..., -2, -1, 0, 1, 2, ...}. &reftitle.seealso; Числа с плавающей точкой Вычисления над числами с произвольной точностью BCMath Вычисления над целыми числами с произвольной точностью (GNU Multiple Precision) Синтаксис Целые числа (int) могут быть указаны в десятичной (основание 10), шестнадцатеричной (основание 16), восьмеричной (основание 8) или двоичной (основание 2) системе счисления. Для задания отрицательных целых (int) используют оператор отрицания Для записи в восьмеричной системе счисления перед числом ставят 0 (ноль). Начиная с PHP 8.1.0 восьмеричной нотации также может предшествовать 0o или 0O. Для записи в шестнадцатеричной системе счисления необходимо поставить перед числом 0x. Для записи в двоичной системе счисления необходимо поставить перед числом 0b Начиная с PHP 7.4.0 целочисленные литералы могут содержать подчёркивания (_) между цифрами для лучшей читаемости литералов. Эти подчёркивания удаляются сканером PHP. Целые числа ]]> Формально, структура целых чисел int принята в PHP 8.1.0 (ранее не допускались восьмеричные префиксы 0o или 0O, а до PHP 7.4.0 не допускалось подчёркивание): Размер типа int зависит от платформы, хотя, как правило, максимальное значение примерно равно 2 миллиардам (это 32-битное знаковое). 64-битные платформы обычно имеют максимальное значение около 9E18. PHP не поддерживает беззнаковые целые числа (int). Размер int может быть определён с помощью константы PHP_INT_SIZE, максимальное значение — с помощью константы PHP_INT_MAX, а с помощью константы PHP_INT_MIN можно определить минимальное значение. Переполнение целых чисел Если PHP обнаружил, что число превышает размер типа int, он будет интерпретировать его в качестве float. Аналогично, если результат операции лежит за границами типа int, он будет преобразован во float. Переполнение целых на 32-битных системах ]]> Переполнение целых на 64-битных системах ]]> В PHP нет оператора целочисленного (int) деления, для этого существует функция intdiv. Результатом 1/2 будет float 0.5. Если привести значение к int, оно будет округлено вниз, то есть будет отброшена дробная часть числа. Для большего контроля над округлением используют функцию round. ]]> Преобразование в целое Для явного преобразования в тип int используют приведение (int) или (integer). Однако в большинстве случаев в приведении типа нет необходимости, так как значение будет автоматически преобразовано, если оператор, функция или управляющая структура требует аргумент типа int. Значение также может быть преобразовано в тип int функцией intval. Если значением с типом resource преобразовывается в значением с типом int, то результатом будет уникальный номер ресурса, привязанный к resource во время исполнения PHP программы. Смотрите также: Манипуляции с типами. Из <link linkend="language.types.boolean">логического</link> типа Логическое значение &false; преобразовывается в 0 (ноль), а &true; — в 1 (единицу). Из <link linkend="language.types.float">чисел с плавающей точкой</link> При преобразовании из float в int число будет округлено вниз. Начиная с PHP 8.1.0 при неявном преобразовании неинтегрального числа с плавающей точкой (&float;) в целое число (&integer;), которое теряет точность, выдаётся уведомление об устаревании. ]]> Если число с плавающей точкой превышает размеры int (обычно ­± 2.15e+9 = 2^31 на 32-битных системах и ± 9.22e+18 = 2^63 на 64-битных системах, результат будет неопределённым, так как float не имеет достаточной точности, чтобы вернуть верный результат в виде целого числа (int). В этом случае не будет выведено ни предупреждения, ни даже замечания! Значения NaN и Infinity при приведении к int становятся равными нулю, вместо неопределённого значения в зависимости от платформы. Нельзя приводить неизвестную дробь к типу int, так как это иногда может дать неожиданные результаты. ]]> Подробнее об этом рассказано в предупреждении о точности чисел с плавающей точкой. Из строк Если строка содержит число или ведущую числовую последовательность, тогда она будет преобразована в соответствующее целое число, в противном случае она преобразуется в ноль (0). Из <type>NULL</type> Значение &null; всегда преобразовывается в ноль (0). Из других типов Для других типов поведение преобразования в int не определено. Не нужно полагаться на наблюдаемое ранее поведение, так как оно может измениться без предупреждения.