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, en vez de constantes se podrían utilizar variables. La ventaja de usar constantes en vez de 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 entre usar constantes o variables es inapreciable.

Definir constantes

La función define(nombre, valor) permite definir constantes.

<?php
define("PI", 3.14);
print "<p>El valor de pi es " . PI . "</p>\n";
?>
<p>El valor de pi es 3.14</p>
<?php
define("AUTOR", "Bartolomé Sintes Marco");
print "<p>Autor: " . AUTOR . "</p>\n";
?>
<p>Autor: Bartolomé Sintes Marco</p>
<?php
define("LIBRO", ["Don Quijote", "Cervantes", 1605]);
print "<p>" . LIBRO[1] . " escribió " . LIBRO[0] . " en " . LIBRO[2] . ".</p>\n";
?>
<p>Cervantes escribió Don Quijote en 1605.</p>

También se pueden definir constantes mediante la palabra reservada const.

<?php
const PI = 3.14;
print "<p>El valor de pi es " . PI . "</p>\n";
?>
<p>El valor de pi es 3.14</p>
<?php
const AUTOR = "Bartolomé Sintes Marco";
print "<p>Autor: " . AUTOR . "</p>\n";
?>
<p>Autor: Bartolomé Sintes Marco</p>
<?php
const LIBRO = ["Don Quijote", "Cervantes", 1605];
print "<p>" . LIBRO[1] . " escribió " . LIBRO[0] . " en " . LIBRO[2] . ".</p>\n";
?>
<p>Cervantes escribió Don Quijote en 1605.</p>

Nota: Se pueden definir matrices como constantes desde PHP 5.6 mediante const y desde PHP 7.0 mediante define().


La costumbre es escribir los nombres de las constantes en mayúsculas. Los nombres de las constantes deben empezar por una letra (con o sin acentos) o un guion bajo y estar formados solo por letras, números y guiones bajos.


Las constantes no se sustituyen dentro de una cadena (ni siquiera escribiéndolas entre llaves), por lo que es necesario concatenarlas para mostrar su valor.

<?php
define("PI", 3.14);
print "<p>El valor de pi es PI</p>\n";         // El valor NO se sustituye
print "<p>El valor de pi es {PI}</p>\n";       // El valor NO se sustituye
print "<p>El valor de pi es " . PI . "</p>\n"; // El valor SÍ se sustituye
?>
<p>El valor de pi es PI</p>
<p>El valor de pi es {PI}</p>
<p>El valor de pi es 3.14</p>

En las constantes, PHP distingue entre minúsculas y mayúsculas:

<?php
define("PI", 3.14);
define("pi", 3.141592);
print "<p>El valor de pi es " . PI . "</p>";
print "<p>El valor de pi es " . pi . "</p>";
?>
<p>El valor de pi es 3.14</p>
<p>El valor de pi es 3.141592</p>

No se puede definir dos veces la misma constante (independientemente de que se defina con define() o con const). Si se intenta, se genera un aviso E_WARNING y la segunda definición no se ejecuta.

<?php
define("PI", 3.14);
define("PI", 3.141592);
print "<p>El valor de pi es " . PI . "</p>";
?>
Warning: Constant PI already defined in ejemplo.php on line 3

El valor de pi es 3.14


Definir constantes mediante la función define() no es lo mismo que hacerlo mediante la palabra reservada const.

Constantes predefinidas

Tanto PHP como los módulos cargados definen automáticamente una serie de constantes predefinidas, de las que se comentan algunas a continuació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>\n";
?>
<pre>Array
(
    [E_ERROR] => 1
    [E_RECOVERABLE_ERROR] => 4096
    [E_WARNING] => 2
    [E_PARSE] => 4
    [E_NOTICE] => 8
    [E_STRICT] => 2048
    ...
)
</pre>

INF

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

PHP_INT_SIZE

PHP_INT_SIZE es el tamaño en bytes de las variables de tipo entero, que depende del ordenador, del sistema operativo y de la versión de PHP. En sistemas de 32 bits suele ser 4 bytes y en sistema de 64 bits suele ser 8 bytes.

<?php
print "<p>En este servidor los enteros ocupan " . PHP_INT_SIZE . " bytes.</p>\n";
?>
Enlace a ejemplo

Nota: En las versiones de PHP de 64 bits para Windows anteriores a PHP 7, los enteros tenían 4 bytes de tamaño. A partir de PHP 7, en las versiones de PHP de 64 bits para Windows los enteros tiene un tamaño de 8 bytes.

PHP_INT_MAX y PHP_INT_MIN

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

<?php
print "<p>En este servidor el mayor entero posible es  " . PHP_INT_MAX . ".</p>\n";
?>
Enlace a ejemplo

PHP_INT_MIN es el menor entero que se puede guardar en una variable de tipo entero.

<?php
print "<p>En este servidor el menor entero posible es  " . PHP_INT_MIN . ".</p>\n";
?>
Enlace a ejemplo

Estos valores dependen del tamaño en bytes que ocupan las variables en la memoria, que a su vez depende del microprocesador, del sistema operativo y de la versión de PHP. En una variable de tipo entero se guardan tanto valores positivos como negativos (utilizando la notación complemento a dos para los negativos).

Nota: En las versiones de PHP de 64 bits para Windows anteriores a PHP 7, los enteros tenían 4 bytes de tamaño. A partir de PHP 7, en las versiones de PHP de 64 bits para Windows los enteros tiene un tamaño de 8 bytes.

PHP_FLOAT_MAX y PHP_FLOAT_MIN

PHP_FLOAT_MAX es el mayor decimal que se puede guardar en una variable de tipo decimal.

<?php
print "<p>En este servidor el mayor decimal posible es  " . PHP_FLOAT_MAX . ".</p>\n";
?>
Enlace a ejemplo

PHP_FLOAT_MIN es el menor decimal que se puede guardar en una variable de tipo decimal.

<?php
print "<p>En este servidor el menor decimal posible es  " . PHP_FLOAT_MIN . ".</p>\n";
?>
Enlace a ejemplo

Estos valores corresponden al formato IEEE 754 64 bits que utiliza PHP.

PHP_FLOAT_EPSILON y PHP_FLOAT_DIG

PHP_FLOAT_EPSILON es el mayor decimal que se puede guardar en una variable de tipo decimal.

<?php
print "<p>En este servidor el decimal más próximo a cero posible es  " . PHP_FLOAT_EPSILON . ".</p>\n";
?>
Enlace a ejemplo

PHP_FLOAT_DIG es el menor decimal que se puede guardar en una variable de tipo decimal.

<?php
print "<p>En este servidor un decimal se puede redondear " . PHP_FLOAT_DIG . " cifras sin pérdidas.</p>\n";
?>
Enlace a ejemplo

Estos valores corresponden al formato IEEE 754 64 bits que utiliza PHP.