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.
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)
?>
decimal : [1-9][0-9]* | 0 hexadecimal : 0[xX][0-9a-fA-F]+ octal : 0[0-7]+ integer : [+-]?decimal | [+-]?hexadecimal | [+-]?octal
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
?>
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_dump( 0xffffffff );
// output: float(4294967295)
// porém não é válido para hexadecimais com valores acima de 2^32-1:
var_dump( 0x100000000 );
// output: int(2147483647)
$milhao = 1000000;
$numero_grande = 50000 * $milhao;
var_dump($numero_grande);
// saida: float(50000000000)
?>
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)
?>
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.
FALSE será retornado como 0 (zero), e TRUE como 1 (um).
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!
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!
?>
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.