Inteiros

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

Sintaxe

Int pode ser especificado 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 int negativo.

Para usar a notação octal, preceda o número com um 0 (zero). A partir do PHP 8.1.0, a notação octal também pode ser precedida por 0o ou 0O. 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 = 0o123; // número octal (a partir do PHP 8.1.0)
$a = 0x1A; // número hexadecimal (equivalente a 26 em decimal)
$a = 0b11111111; // número binário (equivalente ao 255 decimal)
$a = 1_234_567; // número decimal (a partir do PHP 7.4.0)
?>

Formalmente, a estrutura para literais int é a partir do PHP 8.1.0 (anteriormente, os prefixos octal 0o ou 0O não eram permitidos, e antes do PHP 7.4.0 os 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[oO]?[0-7]+(_[0-7]+)* binary : 0[bB][01]+(_[01]+)* integer : decimal | hexadecimal | octal | binary 

O tamanho de um int depende da plataforma, embora um valor máximo de cerca de dois bilhões seja o valor usual (são 32 bits assinados). As plataformas de 64 bits geralmente têm um valor máximo de cerca de 9E18. O PHP não suporta int não assinados. O tamanho int pode ser determinado usando a constante PHP_INT_SIZE, o valor máximo usando a constante PHP_INT_MAX e o valor mínimo usando a constante PHP_INT_MIN.

Overflow de inteiros

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

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 existe operador de divisão int no PHP, para conseguir isso use a função intdiv() . 1/2 produz o float0.5. O valor pode ser convertido em um int para arredondar para zero ou a função round() fornece um controle mais preciso 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 int, 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 int como argumento. Um valor também pode ser convertido para int utilizando a função intval().

Se um resource for convertido para um int, resultará no número único do recurso, atribuído ao resource 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

Ao converter de float para int, o número será arredondado towards zero. A partir do PHP 8.1.0, um aviso de descontinuação é emitido ao converter implicitamente um float não integral para int que perde precisão.

<?php

function foo($value): int {
return
$value;
}

var_dump(foo(8.1)); // "Descontinuado: conversão implícita de float 8.1 para int perde precisão" a partir do PHP 8.1.0
var_dump(foo(8.1)); // 8 antes do PHP 8.1.0
var_dump(foo(8.0)); // 8 em ambos os casos

var_dump((int)8.1); // 8 em ambos os casos
var_dump(intval(8.1)); // 8 em ambos os casos
?>

Se o float estiver além dos limites de int (geralmente +/- 2.15e+9 = 2^31 em plataformas de 32 bits e +/- 9.22e+18 = 2^63 em plataformas de 64 bits), o resultado é indefinido , já que o float não tem precisão suficiente para fornecer um resultado int exato. Nenhum aviso, nem mesmo um aviso será emitido quando isso acontecer!

Nota:

NaN e infinito sempre serão zero quando convertidos para int.

Aviso

Nunca modifique uma fração desconhecida para int, 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 strings

Se a string for numérica ou numérica inicial, ela será resolvida para o valor inteiro correspondente, caso contrário, será convertida em zero (0).

De NULL

null é sempre convertido em zero (0).

De outros tipos

Cuidado

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

To Top