006b Tipos de datos: Enteros
Un número entero es cualquier número entero dentro de un cierto rango. El rango depende de si su PHP está construido con una plataforma de 32 bits o una plataforma de 64 bits. Hay tres constantes útiles que muestran el tamaño y el rango que puede tener su entero.
<?php
// 32 bit
echo PHP_INT_SIZE; // 4 (bytes)
echo PHP_INT_MAX; // 2147483647
echo PHP_INT_MIN; // -2147483648
// 64 bit
echo PHP_INT_SIZE; // 8 (bytes)
echo PHP_INT_MAX; // 9223372036854775807
echo PHP_INT_MIN; // -9223372036854775808
?>
Sus resultados pueden variar dependiendo en su sistema y su compilación de PHP. Como sea, es importante entender el rango de enteros con que está trabajando.
¿Qué pasará si trataras de asignar un integer que es más grande que el rango permite?
<?php
$a = PHP_INT_MAX;
var_dump($a); // int
$a = $a + 1;
var_dump($a); // double (float)
$b = PHP_INT_MAX + PHP_INT_MAX;
var_dump($b); // double (float)
?>
Notación de enteros
Enteros se pueden representar con notación decimal (base 10), hexadecimal (base 16), octal (base 8), o binario (base 2).
Números decimales se expresan como haría normalmente. Para números hexadecimales, empieza el número con 0x; para octal, con 0 o 0o; para binario, con 0b. También, puede usar guiones bajos para mantener claro números largos. Aquí sigue un ejemplo de la documentación oficial de enteros:
<?php
$a = 1234; // número decimal
$a = 0123; // número octal (equivale a 83 decimal)
$a = 0o123; // número octal
$a = 0x1A; // número hexadecimal (equivale a 26 decimal)
$a = 0b11111111; // número binario (equivale a 255 decimal)
$a = 1_234_567; // número decimal (PHP ignora los guiones bajos)
?>
Convertir a integer
Para convertir a un número entero, simplemente coloque (int)
antes de lo que desea forzar. Hay situaciones en las que PHP convertirá automáticamente a un número entero si un operador, función o estructura de control requiere un integer. También puede usar el método intval(), que tiene la ventaja de permitirle especificar la base del número al que se convertirá.
Forzado de booleano a int
Si pone (int) false
, se convertirá a 0. Si pone (int) true
, se convertirá a 1.
Forzado de punto flotante a int
Empezando con la versión de PHP 8.1.0, forzando un float a un int es obsoleto. Aún funcionará, pero emitirá una advertencia: "Deprecated: Implicit conversion from float to int loses precision." Como indica la advertencia, cuando fuerza un integer de un float, el resultado es redondeado hacia 0. Así que si pone (int) 7.9
, el resultado será 7
. Y si pone (int) -7.9
, el resultado será -7
.
El asunto es un poco diferente cuando fuerza un float que es afuera del rango del integer. En tal caso, el resultado no es definido, pero PHP no emitirá un error ni una advertencia, el número que resulta no tendrá sentido.
Forzado de string a int
Forzar de un string sólo funciona si el string empieza con un número.
<?php
echo (int) "100"; // 100
echo (int) "1.2"; // 1
echo (int) "abc 123"; // 0
echo (int) "123 abc"; // 123
?>
Forzado de NULL a int
Nulo siempre se convierte a 0 (cero).
Forzado de otros tipos
El forzado de otros tipos no se puede, la salida variará. No lo haga.
Recursos
Retos
Encuentra el tamaño de su integer
Utiliza las constantes PHP_INT_SIZE
, PHP_INT_MAX
, y PHP_INT_MIN
para determinar el tamaño y rango de los integers en su sistema.
Forzados raros
Forzar de diferentes tipos a int
. En particular, trata de forzar de floats, números afuera del rango del integer en su computadora, y otros tipos como array u objetos a int
para ver que pasará.