Un int es un número del conjunto ℤ = {..., -2, -1, 0, 1, 2, ...}.
Los int pueden especificarse en notación decimal (base 10), hexadecimal (base 16), octal (base 8) o binaria (base 2). El operador de negación puede utilizarse para denotar un int negativo.
Para usar la notación octal, preceda el número con un 0
(cero).
A partir de PHP 8.1.0, la notación octal también puede ser precedida por 0o
o 0O
.
Para usar la notación hexadecimal, preceda el número con 0x
.
Para usar la notación binaria, preceda el número con 0b
.
A partir de PHP 7.4.0, los literales de enteros pueden contener guiones bajos (_
) entre dígitos,
para una mejor legibilidad de los literales. Estos guiones bajos son eliminados por el analizador de PHP.
Ejemplo #1 Literales de enteros
<?php
$a = 1234; // número decimal
$a = 0123; // número octal (equivalente a 83 decimal)
$a = 0o123; // número octal (a partir de PHP 8.1.0)
$a = 0x1A; // número hexadecimal (equivalente a 26 decimal)
$a = 0b11111111; // número binario (equivalente a 255 decimal)
$a = 1_234_567; // número decimal (a partir de PHP 7.4.0)
?>
Formalmente, la estructura para los literales int es a partir de PHP 8.1.0
(anteriormente, los prefijos octales 0o
o 0O
no estaban permitidos, y antes de PHP 7.4.0 los guiones bajos no estaban 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
El tamaño de un int depende de la plataforma, aunque un valor máximo de aproximadamente dos mil millones es el valor habitual (eso es 32 bits con signo).
Las plataformas de 64 bits suelen tener un valor máximo de aproximadamente 9E18.
PHP no soporta int sin signo.
El tamaño de int puede determinarse
utilizando la constante PHP_INT_SIZE
, el valor máximo utilizando
la constante PHP_INT_MAX
,
y el valor mínimo utilizando la constante PHP_INT_MIN
.
Si PHP encuentra un número más allá de los límites del tipo int, se interpretará como un float en su lugar. Asimismo, una operación que resulte en un número más allá de los límites del tipo int devolverá un float en su lugar.
Ejemplo #2 Desbordamiento de enteros
<?php
$large_number = 50000000000000000000;
var_dump($large_number); // float(5.0E+19)
var_dump(PHP_INT_MAX + 1); // sistema de 32 bits: float(2147483648)
// sistema de 64 bits: float(9.2233720368548E+18)
?>
No existe un operador de división de int en PHP, para lograr esto
utilice la función intdiv().
1/2
produce el float 0.5
.
El valor puede convertirse a un int para redondearlo hacia cero, o
la función round() proporciona un control más fino sobre el redondeo.
<?php
var_dump(25/7); // float(3.5714285714286)
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7)); // float(4)
?>
Para convertir explícitamente un valor a int, utilice la conversión (int)
o (integer)
. Sin embargo, en
la mayoría de los casos la conversión no es necesaria, ya que un valor será convertido automáticamente si un operador, función o estructura de control requiere un
argumento int. Un valor también puede convertirse a
int con la función intval().
Si un resource se convierte a un int, entonces el resultado será el número de recurso único asignado al resource por PHP en tiempo de ejecución.
Véase también Manipulación de tipos.
Al convertir de float a int, el número será redondeado hacia cero. A partir de PHP 8.1.0, se emite un aviso de deprecación cuando se convierte implícitamente un float no entero a int que pierde precisión.
<?php
function foo($value): int {
return $value;
}
var_dump(foo(8.1)); // "Deprecated: Implicit conversion from float 8.1 to int loses precision" a partir de PHP 8.1.0
var_dump(foo(8.1)); // 8 anterior a PHP 8.1.0
var_dump(foo(8.0)); // 8 en ambos casos
var_dump((int) 8.1); // 8 en ambos casos
var_dump(intval(8.1)); // 8 en ambos casos
?>
Si el float está más allá de los límites de int (normalmente
+/- 2.15e+9 = 2^31
en plataformas de 32 bits y
+/- 9.22e+18 = 2^63
en plataformas de 64 bits),
el resultado es indefinido, ya que el float
no tiene suficiente precisión para dar un resultado int exacto.
¡No se emitirá ninguna advertencia, ni siquiera un aviso cuando esto ocurra!
Nota:
NaN
,Inf
y-Inf
siempre serán cero cuando se conviertan a int.
Nunca convierta una fracción desconocida a int, ya que esto puede llevar a veces a resultados inesperados.
<?php
echo (int) ( (0.1+0.7) * 10 ); // imprime 7!
?>
Véase también la advertencia sobre la precisión de los flotantes.
Si la string es
numérica
o numérica inicial, entonces se resolverá al
valor entero correspondiente, de lo contrario se convertirá a cero
(0
).
El comportamiento de la conversión a int es indefinido para otros tipos. No se debe confiar en ningún comportamiento observado, ya que puede cambiar sin previo aviso.