Програмування на мові PHP неможливе без використання цілих чисел, з якими дуже легко виконувати операції та для яких створені спеціальні функції їх обробки.

Цілі числа Integer - це числа без дробової частини в діапазоні, залежному від розрядності системи. Можуть можуть бути представлені у десятковому, двійковому, вісімковому та шістнадцятковому форматах.

Десяткова система


Десяткова система числення є однією з найпоширеніших систем числення, яку ми повсякденно використовуємо. У кожному розряді (позиції) може використовуватися тільки одна цифра з діапазону від 0 до 9. Основою системи є число 10.

Двійкова система


Двійковий запис Integer доступний починаючи з PHP 5.4.0.

Двійкова позиційна система числення, в основному, використовується в обчислювальній техніці з основою 2 і записується у кожному розряді двома символами (цифрами): 0 і 1.

Розберемо, наприклад, число 10101, аналогічне числу 21 в десятковій системі числення. Щоб перевести з двійкової в десяткову систему необхідно помножити кожну цифру двійкового числа на основу 2, зведену в степінь, рівну розряду. Розряди рахуються з права наліво починаючи з нуля. Таким чином, число:

10101 = 1 * 24 + 0 * 23 + 1 * 22 + 0 * 21 + 1 * 20 = 16 + 0 + 4 + 0 + 1 = 21

У PHP перевести двійкові дані в десяткові можна скориставшись функцією Bindec:
echo bindec(10101); // 21

Зворотне перетворення з десяткової в двійкову систему можна здійснити функцією Decbin:
echo decbin(21); // 10101

Вісімкова система


Як і двійкова, вісімкова система часто застосовується в цифровій техніці. Має основу 8 і використовує для запису числа від 0 до 7. Може здатися, що вісімкова і шістнадцяткові числа є надлишковою спадщиною мови С, однак вони застосовуються і в Wеb розробці, наприклад, при визначення прав доступу до файлів і директорій, кодуванні кольору тощо.

Для прикладу візьмемо число 251. Для переведення в 10-ву систему необхідно кожен розряд вихідного числа помножити на 8n, де n - це номер розряду. Виходить що:

251 = 2 * 82 + 5 * 81 + 1 * 80 = 128 + 40 + 1 = 169

Для перетворення з десяткової в вісімкову систему можна скористатися функцією Decoct:
echo decoct(169); // 251

Шістнадцяткова система


Шістнадцяткова система широко використовується в сучасних комп’ютерах. Її можна побачити, наприклад, при визначенні кольору (FFFFFF). Має основу 16 і використовує для запису числа: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, де букви рівні 10, 11, 12, 13, 14, 15 відповідно.

Для прикладу візьмемо число 40F. Для переведення у вісімкову систему - спочатку необхідно перевести шістнадцяткове число в двійкове, а потім, розбивши на групи по 3 розряди - у вісімкове. Щоб перетворити число в двійкову систему необхідно кожну цифру представити у вигляді 4-х розрядного двійкового числа.
40F = 100 0 1111

Але в 1 і 2 групах не вистачає розряду, тому заповнимо кожен провідними нулями:
0100 0000 1111

Тепер необхідно розділити отримане число на групи по 3 цифри справа наліво:
0100 0000 1111 = 010 000 001 111

Переведемо кожну двійкову групу у вісімкову систему, помноживши кожен розряд на 2n, де n - номер розряду:

(0 * 22 + 1 * 21 + 0 * 20) (0 * 22 + 0 * 21 + 0 * 20) (0 * 22 + 0 * 21 + 1 * 20) (1 * 22 + 1 * 21 + 1 * 20) = 2017

Відповідно 2017 у вісімковій системі дорівнює +1039 в десятковій. Для перетворення числа з десяткової системи числення в шістнадцяткову існує функція Dechex:
echo dechex(1039); // 40f

Для запису у вісімковій системі числення, необхідно поставити перед числом 0 (нуль). Для запису в шістнадцятковій системі числення, необхідно поставити перед числом 0x. Для запису в двійковій системі числення, необхідно поставити перед числом 0b.
$a = 2017;          // десяткове число
$a = -999; // від'ємне число
$a = 0251; // вісімкове число (еквівалентно 169 в десятковій системі)
$a = 0x040F; // шістнадцяткове число (еквівалентно 1039 в десятковій системі)
$a = 0b10111111; // двійкове число (еквівалентно 191 в десятковій системі)

Нагадаємо, що двійковий запис Integer доступний починаючи з PHP 5.4.0, тому в більш ранніх версіях буде відображено повідомлення про помилку:
Parse error: syntax error, unexpected T_STRING in file.php on line...

Розмір Integer залежить від платформи. Діапазон 32-бітних систем від -2 147 483 648 до 2 147 483 647. 64-бітні платформи зазвичай мають максимальне значення близько 9E18. PHP не підтримує беззнакові цілі.

З версії PHP 5.0.5 розмір Integer може бути визначений за допомогою константи PHP_INT_SIZE, а максимальне значення - за допомогою константи PHP_INT_MAX. З версії PHP 7.0.0 так само введена константа PHP_INT_MIN, за допомогою якої можна визначити мінімальне значення.
echo PHP_INT_SIZE;    // 8
echo PHP_INT_MIN; // -9223372036854775808
echo PHP_INT_MAX; // 9223372036854775807

Якщо результат операції лежить за межами типу Integer, він буде перетворений у Float.
var_dump(9223372036854775807);    // int(9223372036854775807)
var_dump(9223372036854775808); // float(9.223372036854776E+18)

У PHP не існує оператора ділення цілих чисел. Результатом 1/2 буде Float 0.5. Якщо привести значення до Integer, воно буде округлено вниз, тобто буде відкинута дрібна частина числа.
echo (int)(0.5); // 0

Для більшого контролю над округленням використовуйте функцію Round.
var_dump(20/3);           // float(6.6666666666667)
var_dump((int)(20/3)); // int(6)
var_dump(round(20/3)); // float(7)

Для явного перетворення в Integer, використовуйте приведення Int або Integer. Однак, в більшості випадків, в приведенні типу немає необхідності, так як значення буде автоматично перетворено, якщо оператор, функція або керуюча структура вимагає аргумент типу Integer. Значення також може бути перетворено в Integer за допомогою функції Intval.

Якщо Resource перетворюється в Integer, то результатом буде унікальний номер ресурсу, прив’язаний до Resource під час виконання PHP програми.

Маніпуляції з типами:


З булевого типу: FALSE перетвориться в 0 (нуль), а TRUE - в 1 (одиницю).

З чисел з плаваючою крапкою: число буде округлено в бік нуля.

З рядків: якщо рядок починається з вірного числового значення, буде використано це значення. Інакше значенням буде 0 (нуль).

Для інших типів поведінка перетворення в Integer не визначена, тому не варто надіятися на однозначний результат перетворення.