Типове
PHP Manual

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

Целочислено е всяко число от множеството Z = {..., -2, -1, 0, 1, 2, ...}.

Вж. също: Цели числа с произволна дължина / GMP, Числа с плаваща запетая и Произволна точност / BCMath

Синтаксис

Целите числа могат да бъдат дефинирани в десетична (с основа 10), шестнайсетична (с основа 16) или осмична (с основа 8) бройна система, незадължително предшествани от знак (- или +).

Ако използвате осмична бройна система, трябва да предшествате числото с 0 (нула), а за да използвате шестнайсетична система, трябва да го предшествате с 0x.

Example #1 Целочислени литерали

<?php
$a 
1234// десетично число
$a = -123// отрицателно число
$a 0123// осмично число (еквивалентно на десетично 83)
$a 0x1A// шестнайсетично число (еквивалентно на десетично 26)
?>

Възможните шаблони за цели числа са:

десетично       : [1-9][0-9]*
                | 0 

шестнадесетично : 0[xX][0-9a-fA-F]+

осмично         : 0[0-7]+

цяло число      : [+-]?decimal
                | [+-]?hexadecimal
                | [+-]?octal

Размерът на целите числа е платформено-зависим, макар че обикновено максималната стойност е около два милиарда (т.е. 32 бита със знак). PHP не поддържа беззнакови цели числа. Текущият размер на целите числа може да бъде установен посредством PHP_INT_SIZE, а максималната стойност - от PHP_INT_MAX, след PHP 4.4.0 и PHP 5.0.5.

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

Ако на осмично число бъде подадена невалидна цифра (т.е. 8 или 9), остатъкът от числото ще бъде пренебрегнат.

Example #2 Осмична особеност

<?php
var_dump
(01090); // осмично 010 = десетично 8
?>

Целочислено препълване

Ако укажете число извън обхвата на целочисления тип, то ще бъде интерпретирано като число с плаваща запетая. Също така, ако извършите операция, чийто резултат е число извън обхвата на целочисления тип, то също ще бъде върнато в плаващ тип.

<?php
$large_number 
=  2147483647;
var_dump($large_number);
// изход: int(2147483647)

$large_number =  2147483648;
var_dump($large_number);
// изход: float(2147483648)

// работи също за цели числа, указани в шестнадесетична система, в интервала от 2^31 до 2^32-1:
var_dump0xffffffff );
// output: float(4294967295)

// не работи за цели числа, указани в шестнадесетична система, за стойности над 2^32-1:
var_dump0x100000000 );
// изход: int(2147483647)

$million 1000000;
$large_number =  50000 $million;
var_dump($large_number);
// изход: float(50000000000)
?>

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

За нещастие, в PHP съществуваше грешка, така че това не работи винаги както трябва, когато са намесени отрицателни числа. Например: когато правите -50000 * $million, резултатът ще бъде -429496728. Все пак, когато и двата операнда са положителни, няма проблем.

Грешката е поправена в PHP 4.1.0.

В PHP няма оператор за целочислено деление. 1/2 дава плаващо 0.5. Можете да преобразувате стойността до цяло число, така че тя винаги да се закръгля надолу, или пък да използвате функцията round().

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

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

За да превърнете изрично стойност в цяло число, използвайте преобразуването (int) или (integer). В повечето случаи обаче няма нужда да се използва преобразуване, понеже стойността ще бъде преобразувана автоматично, когато даден оператор, функция или контролна структура изискват целочислен аргумент. Можете също да превърнете стойност в цяло число посредством функцията intval().

Вж. също Манипулации с типове.

От булев

FALSE ще даде 0 (нула), а TRUE ще даде 1 (едно).

От числа с плаваща запетая

При превръщане от плаващо в цяло, числото ще бъде закръглено към нулата (надолу).

Ако плаващото е извън обхвата на цяло число (обикновено +/- 2.15e+9 = 2^31), резултатът е недефиниран, тъй като плаващото не е имало достатъчно точност, за да даде правилен целочислен резултат. В този случай няма да бъде изведено нито предупреждение, нито дори и съобщение!

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

Никога не преобразувайте неизвестна дроб в цяло число, защото понякога това може да доведе до неочаквани резултати.

<?php
echo (int) ( (0.1+0.7) * 10 ); // извежда 7!
?>

За повече информация, вижте предупреждението за плаваща точност.

От други типове

Внимание

Поведението при превръщане от други типове в цяло число е недефинирано. В момента, поведението е същото, както ако стойността първо е била превърната в булев. Все пак, не разчитайте на това поведение, тъй като в бъдеще то може да се промени без предупреждение.


Типове
PHP Manual