Inteiros

Um inteiro é um número do conjunto ℤ = {..., -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). O operador de negação pode ser usado para indicar um inteiro negativo.

Inteiros binários literais estão disponíveis a partir do 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.

A partir do PHP 7.4.0, inteiros literais podem conter sublinhados (_) entre os dígitos, para melhorar a sua leitura. Estes sublinhados serão removidos pelo scanner do PHP.

Exemplo #1 Literais inteiras

<?php
$a 
1234// número decimal
$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)
$a 1_234_567// decimal number (as of PHP 7.4.0)
?>

Formalmente, as estruturas para inteiros literais são a partir do PHP 7.4.0 (anteriormente, sublinhados não eram permitidos):

decimal     : [1-9][0-9]*(_[0-9]+)*
            | 0

hexadecimal : 0[xX][0-9a-fA-F]+(_[0-9a-fA-F]+)*

octal       : 0[0-7]+(_[0-7]+)*

binary      : 0[bB][01]+(_[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, a partir do PHP 5.0.5, e o valor mínimo utilizando a constante PHP_INT_MIN a partir do PHP 7.0.0.

Aviso

Em versões anteriores ao PHP 7, se um dígito inválido é passado para um inteiro octal (por exemplo, 8 ou 9), o resto do número será ignorado. A partir do 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 inteiro 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.

Nota: A partir do PHP 7.0.0, a função intdiv() está disponível para uma divisão inteira.

<?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, utiliza-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 inteiro (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 convertidos para inteiro.

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 NULL

null é sempre convertido em zero (0).

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.