Enteros PHP

Un número entero es un número del conjunto ℤ = {…, -2, -1, 0, 1, 2, …}.

Sintaxis de Enteros en PHP

Los enteros s se pueden especificar en notación decimal (base 10), hexadecimal (base 16), octal (base 8) o binaria (base 2). El operador de negación se puede usar para denotar un número entero negativo.

Los literales enteros binarios están disponibles desde PHP 5.4.0.

Para usar la notación octal, preceda el número con un 0 (cero). 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 enteros pueden contener guiones bajos ( _ ) entre dígitos, para una mejor legibilidad de los literales. Estos subrayados son eliminados por el escáner de PHP.

<?php
$a = 1234; // decimal number
$a = 0123; // octal number (equivalent to 83 decimal)
$a = 0x1A; // hexadecimal number (equivalent to 26 decimal)
$a = 0b11111111; // binary number (equivalent to 255 decimal)
$a = 1_234_567; // decimal number (as of PHP 7.4.0)
?>

Formalmente, la estructura para los literales enteros es a partir de PHP 7.4.0 (anteriormente, no se permitían los guiones bajos):

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

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

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

binario: 0 [bB] [01] + (_ [01] +) *

entero: decimal
            El | hexadecimal
            El | octal
            El | binario

El tamaño de un número entero depende de la plataforma, aunque el valor habitual es un valor máximo de aproximadamente dos mil millones (es decir, 32 bits con signo). Las plataformas de 64 bits generalmente tienen un valor máximo de aproximadamente 9E18, excepto en Windows anterior a PHP 7, donde siempre era de 32 bits. PHP no admite enteros sin signo . El tamaño entero se puede determinar usando la constante PHP_INT_SIZE, el valor máximo usando la constante PHP_INT_MAXdesde PHP 5.0.5, y el valor mínimo usando la constante PHP_INT_MINdesde PHP 7.0.0.

Advertencia: Antes de PHP 7, si se daba un dígito no válido en un entero octal (es decir, 8 o 9), se ignoraba el resto del número. Desde PHP 7, se emite un error de análisis.

Desbordamiento de enteros en PHP

Si PHP encuentra un número más allá de los límites del tipo entero , se interpretará como un flotante . Además, una operación que resulta en un número más allá de los límites del tipo entero devolverá un flotante .

Desbordamiento de enteros en un sistema de 32 bits

<?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)
?>

Desbordamiento de enteros en un sistema de 64 bits

<?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)
?>

No hay operador de división entera en PHP. 1/2 produce el flotador0.5 . El valor se puede convertir a un entero para redondearlo hacia cero, o la función round () proporciona un control más fino sobre el redondeo.

Nota : A partir de PHP 7.0.0, la función intdiv () está disponible para la división de enteros.

<?php
var_dump(25/7);         // float(3.5714285714286)
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7));  // float(4)
?>

Convirtiendo a entero

Para convertir explícitamente un valor a entero , use las conversiones (int) o (integer) . Sin embargo, en la mayoría de los casos no se necesita la conversión, ya que un valor se convertirá automáticamente si un operador, función o estructura de control requiere un argumento entero . Un valor también se puede convertir a entero con la función intval () .

Si un recurso se convierte en un entero , el resultado será el número de recurso único asignado al recurso por PHP en tiempo de ejecución.

Ver también Tipo Malabares .

De booleanos

FALSEproducirá 0 (cero) y TRUEproducirá 1 (uno).

De números decimales

Al convertir de flotante a entero , el número se redondeará a cero .

Si el flotante está más allá de los límites del número entero (generalmente +/- 2.15e + 9 = 2 ^ 31 en plataformas de 32 bits y +/- 9.22e + 18 = 2 ^ 63 en plataformas de 64 bits que no sean Windows antes de PHP 7), el resultado no está definido, ya que el flotador no tiene suficiente precisión para dar un resultado entero exacto . Sin advertencia, ni siquiera se emitirá un aviso cuando esto suceda.

Nota : A partir de PHP 7.0.0, en lugar de ser indefinido y dependiente de la plataforma, NaN e Infinity siempre serán cero cuando se convierten en enteros .

Advertencia Nunca arroje una fracción desconocida a entero , ya que esto a veces puede conducir a resultados inesperados.

<?php
echo (int) ( (0.1+0.7) * 10 ); // echoes 7!
?>

De cadenas 

Ver Conversión de cadenas a números

De NULL 

NULLsiempre se convierte a cero ( 0 ).

De otros tipos 

Precaución

El comportamiento de convertir a entero no está definido para otros tipos. No , no depender de ningún comportamiento observado, ya que puede cambiar sin previo aviso.