Tipos
PHP Manual

Enteros

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

Consulte tambien:

Sintaxis

Los integer pueden ser especificados mediante notación decimal (base 10), hexadecimal (base 16), octal (base 8) o binaria (base 2), opcionalmente precedidos por un signo (- o +).

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

Para usar la notación octal, se antepone al número un 0 (cero). Para usar la notación hexadecimal, se antepone al número un 0x. Para usar la notación binaria, se antepone al número un 0b.

Ejemplo #1 Enteros literales

<?php
$a 
1234// número decimal
$a = -123// un número negativo
$a 0123// número octal (equivalente a 83 decimal)
$a 0x1A// número hexadecimal (equivalente a 26 decimal)
$a 0b11111111// número binario (equivalente al 255 decimal)
?>

Formalmente, la estructura de integer literales es:

decimal     : [1-9][0-9]*
            | 0

hexadecimal : 0[xX][0-9a-fA-F]+

octal       : 0[0-7]+

binario     : 0b[01]+

entero      : [+-]?decimal
            | [+-]?hexadecimal
            | [+-]?octal
            | [+-]?binary

El tamaño de un integer depende de la plataforma, aunque un valor máximo de aproximadamente dos mil millones es el valor usual (para 32 bits con signo). Las plataformas de 64-bits normalmente tienen un valor máximo de aproximadamente 9E18. PHP no admite integers sin signo. El tamaño de un integer puede ser determinado mediante la constante PHP_INT_SIZE y el valor máximo mediante la constante PHP_INT_MAX desde PHP 4.4.0 y PHP 5.0.5.

Advertencia

Si en un integer octal se da un dígito incorrecto (por ejemplo 8 o 9), el resto del número se ignora.

Ejemplo #2 Octal raros

<?php
var_dump
(01090); // 010 octal = 8 decimal
?>

Desbordamiento de enteros

Si PHP encuentra un número fuera de los límites de un integer, se interpretará como un float en su lugar. Tambien, una operación cuyo resultado es un número fuera de los límites de un integer devolverá en su lugar un float.

Ejemplo #3 Desbordamiento de enteros en sistemas 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)
?>

Ejemplo #4 Desbordamiento de enteros en sistemas 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 existe operador de división de integer en PHP. 1/2produce el float 0.5. El valor puede ser forzado a ser un integer redondeando por defecto, o mediante la función round() que permite un mayor control 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) 
?>

Conversión a enteros

Para convertir explicitamente un valor a integer, se puede emplear tanto (int) como (integer). Sin embargo, la mayoría de las veces la conversión no es necesaria, ya que un valor es convertido de forma automática cuando un operador, función o estructura de control necesite un argumento del tipo integer. Un valor tambien puede ser convertido a integer mediante la función intval().

Consulte también la manipulación de tipos.

Desde booleanos

FALSE produce 0 (cero), y TRUE produce 1 (uno).

Desde números de punto flotante

Cuando se convierte de un float a un integer, el número será redondeado hacia cero.

Si el float esta por debajo de los límites de un integer (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, debido a que float no tiene la precisión suficiente para ofrecer el resultado como un integer exacto. No se mostrará ninguna advertencia, ni siquiera un aviso cuando esto ocurre!

Advertencia

Nunca se debe convertir una fracción desconocida a un integer, ya que a veces puede producir resultados inesperados.

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

Consulte tambien aviso sobre la precisión de float

Desde cadenas

Consulte Conversión de cadenas a números

Desde otros tipos

Precaución

El comportamiento de la conversion de integer a otros tipos es indefinido. No espere que exista un comportamiento esperado, ya que puede cambiar sin previo aviso.


Tipos
PHP Manual