Tipos
PHP Manual

Inteiros

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

Veja também: Inteiros de tamanho arbitrário / GMP, Números de ponto flutuante e Precisão arbitrária / BCMath.

Sintaxe

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

Para usar a notação octal, você precisa preceder o número com um 0 (zero). Para utilizar a notação hexadecimal, preceda número com 0x.

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)
?>
Formalmente, as possíveis representação de inteiros são:
decimal     : [1-9][0-9]*
            | 0

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

octal       : 0[0-7]+

integer     : [+-]?decimal
            | [+-]?hexadecimal
            | [+-]?octal
O tamanho de um inteiro é dependente de plataforma, sendo um número aproximado a 2 bilhões o valor mais comum (número de 32 bits com sinal). 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.

Aviso

Se um dígito inválido é passado para inteiro octal (i.e. 8 ou 9), o resto do número é ignorado.

Exemplo #2 Octal weirdness

<?php
var_dump
(01090); // 010 octal = 8 decimal
?>

Overflow de inteiros

Se você especifica 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 , um ponto flutuante será retornado.

<?php
numero_grande =  2147483647;
var_dump($numero_grande);
// saida: int(2147483647)

$numero_grande =  2147483648;
var_dump($numero_grande);
// saida: float(2147483648)

// é válido também para inteiros hexadecimais entre 2^31 e 2^32-1:
var_dump0xffffffff );
// output: float(4294967295)

// porém não é válido para hexadecimais com valores acima de 2^32-1:
var_dump0x100000000 );
// output: int(2147483647)

$milhao 1000000;
$numero_grande =  50000 $milhao;
var_dump($numero_grande);
// saida: float(50000000000)
?>
Aviso

Infelizmente, há um bug no PHP que faz que ele nem sempre trabalhe corretamente quando há números negativos envolvidos. Por exemplo, quando você faz -50000 * $milhao, o resultado será -429496728. Entretanto, quando ambos os operadores são positivos, isso não ocorre.

Isto foi resolvido no PHP 4.1.0.

Não há operador de divisão inteira no PHP. 1/2 retorna o ponto flutuante 0.5. Você pode moldar (cast) o valor para inteiro para sempre truncar o número, ou você pode usar a função round().

<?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 dos modificadores (int) ou (integer). Entretanto, na maioria dos casos, você não precisa utilizar o modificador, desde que qualquer valor será automaticamente convertido se um operador, função ou estrutura de controle requerer um argumento inteiro . Você também pode converter o valor de um inteiro com a função intval().

Veja também Manipulação de tipos.

de booleanos

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

De números de ponto flutuante

Quando convertendo de números de ponto flutuante para inteiros, o número será truncado.

Se o número convertido estiver além dos limites de um inteiro (usualmente +/- 2.15e+9 = 2^31), o resultado é indefinido, mesmo porque o ponto flutuante não tem a mesma precisão para fornecer um resultado inteiro exato. Não se preocupe, pois nenhum aviso será emitido neste caso!

Aviso

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

<?php
echo (int) ( (0.1+0.7) * 10 ); // imprime 7!
?>
Para maiores informações, veja o alerta sobre a precisão de número flutuante..

De outros tipos

Cuidado

O comportamento da conversão de um inteiro é indefinido de outros tipos. Atualmente, o comportamento é o mesmo como se primeiro o valor fosse convertido para booleano. Entretanto, não confie neste comportamento, pois ele pode mudar sem aviso.


Tipos
PHP Manual