Tipos
PHP Manual

Inteiros

Um inteiro é um número do conjunto Z = {..., -2, -1, 0, 1, 2, ...}.

Veja também:

Sintaxe

Inteiros podem ser especificados em notação decimal (base 10), hexadecimal (base 16), octal (base 8) ou binária (base 2), opcionalmente precedido de sinal (- ou +).

Inteiros binários literais estão disponíveis desde o PHP 5.4.0.

Para usar a notação octal, preceda o número com um 0 (zero). Para utilizar a notação hexadecimal, preceda o número com 0x. Para utilizar a notação binária, preceda o número com 0b.

Exemplo #1 Literais inteiras

<?php
$a 
1234// número decimal
$a = -123// um número negativo
$a 0123// número octal (equivalente a 83 em decimal)
$a 0x1A// número hexadecimal (equivalente a 26 em decimal)
$a 0b11111111// número binário (equivalente ao 255 decimal)
?>

Formalmente, as estruturas para inteiros literais são:

decimal     : [1-9][0-9]*
            | 0

hexadecimal : 0[xX][0-9a-fA-F]+

octal       : 0[0-7]+

binary      : 0b[01]+

integer     : [+-]?decimal
            | [+-]?hexadecimal
            | [+-]?octal
            | [+-]?binary

O tamanho de um inteiro depende da plataforma, sendo um número aproximado a 2 bilhões o valor mais comum (número de 32 bits com sinal). Plataformas 64-bit possuem comumente o valor máximo de aproximadamente 9E18, exceto no Windows em versões anteriores ao PHP 7, onde são sempre 32-bit. O PHP não suporta inteiros sem sinal. O tamanho do inteiro pode ser determinado pela constante PHP_INT_SIZE, e seu o valor máximo com a constante PHP_INT_MAX, desde o PHP 4.4.0 e PHP 5.0.5, e o valor mínimo utilizando a constante PHP_INT_MIN desde o PHP 7.0.0.

Aviso

Em versões anteriores ao PHP 7, se um dígito inválido é passado para inteiro octal (por exemplo, 8 ou 9), o resto do número será ignorado. Desde o PHP 7, um erro de interpretação é emitido.

Overflow de inteiros

Se o PHP encontrar um número além dos limites do tipo inteiro, ele será interpretado como um ponto flutuante. Assim, uma operação que resulte em um número além dos limites do tipo inteiro, retornará um ponto flutuante.

Exemplo #2 Overflow de inteiros em sistemas 32-bit

<?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)
?>

Exemplo #3 Overflow de inteiros em sistemas 64-bit

<?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)
?>

Não há um operador de divisão que resulta em um integer no PHP. 1/2 retorna o ponto flutuante 0.5. O valor pode ser convertido para inteiro para sempre truncar o número, ou usar a função round() que provê um fino controle sobre o arredondamento.

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

Convertendo para inteiro

Para converter explicitamente um valor para inteiro, utilize-se um dos modificadores (int) ou (integer). Entretanto, na maioria dos casos, o modificador não é necessário, já que o valor será automaticamente convertido se um operador, função ou estrutura de controle requerer um inteiro como argumento. Um valor também pode ser convertido para inteiro utilizando a função intval().

Se um recurso for convertido para um inteiro, resultará no número único do recurso, atribuído ao recurso pelo PHP em tempo de execução.

Veja também Manipulação de tipos.

De booleanos

FALSE será retornado como 0 (zero), e TRUE retornará 1 (um).

De números de ponto flutuante

Conversão de números de ponto flutuante para inteiros, fará o número ser truncado.

Se o número convertido estiver além dos limites de um integer (geralmente +/- 2.15e+9 = 2^31 em plataformas 32 bit e +/- 9.22e+18 = 2^63 em plataformas 64-bit que não sejam Windows), o resultado é indefinido, por que o ponto flutuante não possui precisão suficiente para fornecer um resultado inteiro exato. Não se preocupe, pois nenhum aviso será emitido se isso acontecer!

Nota:

A partir do PHP 7.0.0, em vez de ser um valor indefinido e que varia de acordo com a plataforma, NaN e Infinity sempre serão zero quando convertido para integer, a partir do PHP 7.0.0.

Aviso

Nunca modifique uma fração desconhecida para inteiro, porque isto pode, as vezes, fornecer resultados inesperados.

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

Veja também o alerta sobre a precisão de número flutuante.

De outros tipos

Cuidado

O comportamento da conversão de um inteiro é desconhecido para outros tipos. Não confie em nenhum comportamento observado, pois ele pode mudar sem aviso.


Tipos
PHP Manual