# Constantes y constantes predefinidas

PHP permite definir constantes e incluye una serie de constante predefinidas que se pueden utilizar directamente:

## Constantes

Las constantes son elementos de PHP que guardan un valor fijo que no se puede modificar a lo largo del programa. Las constantes pueden ser definidas por el programa o estar predefinidas por el propio PHP o por algún módulo. Los nombres de las constantes siguen las mismas reglas que los nombres de las variables, pero sin el dólar ($) inicial. La costumbre es escribir los nombres de las constantes en mayúsculas.

En principio, se puede no utilizar constantes nunca, puesto que las constantes definidas por el programa podrían reemplazarse por variables. La ventaja de usar constantes y variables es que se puede distinguir a simple vista si a lo largo de un programa algo va a permanecer constante (si es una constante) o puede cambiar (si es una variable). El inconveniente de usar constantes es que las constantes no se sustituyen dentro de las cadenas y es necesario sacarlas fuera de las cadenas, haciendo el código un poco más incómodo de escribir y leer. Desde el punto de vista del rendimiento, la diferencia es inapreciable.

Volver al principio de la página

## Definir constantes

La función define(nombre_constante, valor_constante) permite definir constantes.

    define('PI', 3.14);
    print "<p>El valor de pi es ".PI."</p>";
| El valor de pi es 3.14
    define('AUTOR', 'Bartolomé Sintes Marco');
    print "<p>Autor: ".AUTOR."</p>";
| Autor: Bartolomé Sintes Marco

La costumbre es escribir los nombres de las constantes en mayúsculas. Los nombres de las constantes deben empezar por una letra y tener sólo letras (acentos, etc), números y guiones bajos.

Las constantes no se sustituyen dentro de una cadena por lo que es necesario sacarlas para mostrar su valor.

    define('PI', 3.14);
    print "<p>El valor de pi es PI</p>";
    print "<p>El valor de pi es ".PI."</p>";
| El valor de pi es PI El valor de pi es 3.14

Volver al principio de la página

## Constantes predefinidas

Tanto PHP como los módulos cargados definen automáticamente una serie de constantes predefinidas, de las que se comentan algunas en esta lección:

### Lista completa de constantes predefinidas

El número de constantes predefinidas depende de los módulos cargados en php.ini. La función get_defined_constants() devuelve las constantes predefinidas en el servidor que estemos utilizando:

    <?php
    print '<pre>';
    print_r(get_defined_constants());
    print '</pre>';
    ?>
    <pre>Array
    (
        [E_ERROR] => 1
        [E_RECOVERABLE_ERROR] => 4096
        [E_WARNING] => 2
        [E_PARSE] => 4
        [E_NOTICE] => 8
        [E_STRICT] => 2048
    ...

Volver al principio de la página

### INF

La constante INF representa el infinito, es decir, cualquier número demasiado grande (positivo o negativo) para poderse guardar en una variable decimal.

Volver al principio de la página

### PHP_INT_MAX

PHP_INT_MAX es el valor del mayor entero que se puede guardar en una variable de tipo entero.

    <?php
    $maximo = PHP_INT_MAX;
    print "<p>El mayor entero que se puede guardar en una variable entera es $maximo</p>";
    ?>
| <p>El mayor entero que se puede guardar en una variable entera es 2147483647</p>

Ese valor depende del tamaño en bytes que ocupan las variables en la memoria, que depende del microprocesador y del sistema operativo. En sistemas de 32 bits, los enteros suelen ocupar 4 bytes (32 bits) y por tanto el valor máximo suele ser 2.147.483.647 (231-1) y a que se utiliza la notación complemento a dos.

#### Notación complemento a dos

En un byte (8 bits) se pueden almacenar 256 (28) valores diferentes. Eso permite almacenar por ejemplo, desde el valor 0 hasta el 255. Para almacenar tanto números negativos como positivos, se utiliza la notación complemento a dos, en la que la primera mitad de los valores representan los valores positivos (desde 0 hasta 127) y la segunda mitad de los valores representan los valores negativos (desde -128 hasta -1), como indica la tabla siguiente

El valor ... | 0 | 1 | 2 | 3 | 4 | 5 | ... | 126 | 127 | 128 | 129 | ... | 253 | 254 | 255
... representa el entero ... | 0 | 1 | 2 | 3 | 4 | 5 | ... | 126 | 127 | -128 | -127 | .. | -3 | -2 | -1

En cuatro bytes (32 bits) se pueden almacenar 4.294.967.296 (232)valores distintos. En notación complemento a dos se pueden representar desde el valor -2.147.483.648 hasta 2.147.483.647.

Si se intenta guardar un número demasiado grande positivo, el resultado será seguramente incorrecto. En el ejemplo siguiente se fuerza a PHP a guardar como entero el valor siguiente al máximo valor posible. El valor se guarda, pero cuando se utiliza, PHP lo interpreta como negativo.

    <?php
    $maximo = PHP_INT_MAX;
    print "<p>El mayor entero que se puede guardar en una variable entera es $maximo<p>";
    $demasiado = (int)($maximo+1);
    print "<p>Si se intenta guardar 1 más, el resultado es $demasiado</p>";
    ?>
| <p>El mayor entero que se puede guardar en una variable entera es 2147483647</p> <p>Si se intenta guardar 1 más, el resultado es -2147483648</p>

Volver al principio de la página

### PHP_INT_SIZE

PHP_INT_SIZE es el tamaño en bytes de las variables de tipo entero, que depende del ordenador y el sistema operativo utilizado. En sistemas de 32 bits, suele ser 4 bytes.

    <?php
    $tamano = PHP_INT_SIZE;
    print "<p>Los enteros se guardan utilizando $tamano bytes</p>";
    ?>
| <p>Los enteros se guardan utilizando 4 bytes</p>

Volver al principio de la página

Esta obra está bajo una licencia de Creative Commons Reconocimiento-CompartirIgual 3.0 España.