Constantes en PHP

php Constantes

Tabla de contenidos


Una constante es el identificador (nombre) de un valor simple y, como su nombre lo indica, este valor no es intercambiable durante la ejecución del código (a excepción de las constantes mágicas, que en realidad no son constantes). La constante distingue entre mayúsculas y minúsculas y es común usar letras mayúsculas al nombrar constantes.

Las constantes siguen las mismas reglas para nombrar que en PHP, un nombre de constante válido comienza con una letra o un guión bajo, seguido de un número ilimitado de letras, números y guiones bajos. Y si quisiéramos utilizar expresiones regulares para expresar el nombre de la variable, sería el siguiente:

[ a - zA - Z_ \ x7f - \ xff ] [ a - zA - Z0 - 9 _ \ x7f - \ xff ] *

Ejemplo 1: los nombres de constantes válidas y no válidas

<? php 
// Nombres de constantes enteros 
define( "Text" ,    "something" ); 
define( "Text1" ,   "something else" ); 
define( "Text_BAR", "something more" );
// Nombres de constantes 
define( "2Text" ,     "more" );
// Este método es correcto pero evite usarlo	 
// El lenguaje puede que algún día presente una constante mágica 
// Puede romper su código.	
define( "__Text__" ,  "something" );  
?>

Nota: En este directorio, la letra es todo lo que está en el rango az y AZ y los bytes 127 a 255 (0x7f-0xff).

Al igual que con las variables globales, las constantes están dentro del alcance global y se puede acceder a ellas desde cualquier lugar del código sin tener que considerar el alcance actual.

Formulaciones php de las constantes

La constante se puede definir usando la función define()‎o con la palabra clave const fuera de las clases desde PHP 5.3.0. Permite define()‎asignar constantes a varios tipos de valores y expresiones, mientras que existen algunas restricciones que rigen su uso, las const cuales mostraremos en el siguiente párrafo. En ningún caso es posible cambiar el valor de la constante o cancelar el valor que se le asigna después de realizar el proceso de atribución.

El uso de const valores iniciales específicos (valores escalares, es decir, valores lógicos y enteros y números decimales y cadenas de texto ) en versiones anteriores de la versión 5.6 de PHP. En versiones posteriores fue posible definir la constante como una expresión numérica, y también fue posible definir matrices de constantes. Las constantes también se pueden definir como recursos , pero esto no se recomienda y puede causar resultados inesperados.

El valor de una constante se puede obtener por su nombre, a diferencia de las variables, el nombre no necesita ir precedido de un signo $. La función también se puede utilizar constant()‎para leer el valor de la constante si es necesario para obtener el nombre de la constante de forma dinámica. Para obtener una lista de todas las constantes definidas, puede usar el get_defined_constants()‎.

Nota: las constantes y variables (globales) están en diferentes espacios de nombres, lo que significa que TRUE‎$TRUE(por ejemplo) son diferentes entre sí.

Si no se asigna ningún valor a la constante, PHP asumirá que lo que se quiere decir es el nombre de la constante en sí, como si la llamada fuera a una cadena ( CONSTANT vs "CONSTANT"). Aparecerá un error de nivel E_NOTICEcuando esto suceda. Consulte el tipo de datos de matriz de página para averiguar por qué se produce el $foo[bar]error de (si solo utilizamos define()‎para definir una bar constante). Lo anterior no se aplica a las constantes calificadas (totalmente) donde surgirá un error fatal si no se define este tipo de constante. Si desea saber si la constante está definida o no, puede usar el defined()‎.

Aquí están las diferencias entre constantes y variables:

  • Las constantes no van precedidas de un signo $.
  • Antes de la versión 5.3, las constantes se podían definir utilizando define()‎solo la función , no mediante una simple asignación.
  • Las constantes se pueden definir y acceder desde cualquier lugar sin tener en cuenta el alcance actual.
  • Las constantes no se pueden redefinir o dejar de definir una vez que se han definido.
  • Las constantes solo se pueden usar con valores brutos. En PHP versión 5.6 y posteriores, ahora es posible definir matrices estáticas usando la palabra clave const. En PHP versión 7, ahora es posible usar la función define()‎para definir matrices estáticas. Las matrices estáticas se pueden usar en expresiones escalares estáticas (por ejemplo:) const FOO=array(1,2,3)[0];pero el resultado final debe ser un valor de tipo aceptable en PHP.

Definir constantes

<? php 
define( "CONSTANT" ,  "Hola mundo" ); 
// "Hola Mundo." 
echo  CONSTANT ; 
echo  constant ; 
// "Constante" 
// y aparecerá una alerta. 
?>

Definición de constantes mediante la palabra clave const

<? php 
// funciona desde la versión 5.3.0 
const CONSTANT = 'Hello World';

echo  CONSTANTE;

// Funciona desde la versión 5.6.0 del lenguaje 
const  ANOTHER_CONST  =  CONSTANT.' Adiós mundo '; 
echo  ANOTHER_CONST ;

const  ANIMALES  =  array( 'perro', 'gato', 'loro' ); 
echo  ANIMALES [1]; 
// "gato"
// Funciona desde la versión 7 
define( 'ANIMALS',  array ( 
    'perro' , 
    'gato' , 
    'loro' 
))); 
echo  ANIMALES [2]; 
// "loro" 
?>

Debes saber que las constantes definidas mediante la palabra clave const difieren de las definidas por la función define(),‎ las cuales en el primer caso deben declararse exclusivamente en el ámbito de nivel superior porque estas constantes se definen en tiempo de compilación, lo que significa que no se pueden declarar funciones internas, bucles, condicionales o dentro de un bloque try / catch.

Nota: Las constantes definidas mediante la palabra clave const siempre distinguen entre mayúsculas y minúsculas, mientras que las constantes definidas por una función define()‎ pueden no distinguir entre mayúsculas y minúsculas.

Establecer Constantes de PHP

Establezca la constante, use la función define (), la sintaxis de la función es la siguiente:bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )

La función tiene 3 parámetros:

  • name: parámetro obligatorio, nombre constante, identificador.
  • value: parámetro requerido, valor constante.
  • case_insensitive: parámetro opcional, si se establece en true, no distinguirá entre mayúsculas y minúsculas. Pero con valor predeterminado distingue entre mayúsculas y minúsculas.

En el siguiente ejemplo, creamos una constante sensible a mayúsculas y minúsculas , un valor constante de «Bienvenido a bigcode.es»:

<?php
//Constante sensible a mayúsculas y minúsculas
define("GREETING", "Bienvenido a bigcode.es");
echo GREETING; // Salida Bienvenido a bigcode.es
echo '<br>';
echo greeting; //Saliendo "greeting"
?>

En esta otra demostración siguiente creamos una constante que no distingue entre mayúsculas y minúsculas , un valor constante de «Bienvenido a bigcode.es»:

<?php
//Constante que no distingue entre mayúsculas y minúsculas
define("GREETING", "Bienvenido a bigcode.es", true);
echo greeting;  //Bienvenido a bigcode.es
?>

Constantes mágicas

PHP proporciona una gran cantidad de constantes predefinidas para el código que ejecuta, pero muchas de estas constantes son creadas por múltiples extensiones y están disponibles cuando estas extensiones son proporcionadas por carga dinámica o porque están compiladas.

Hay nueve constantes mágicas que cambian dependiendo de dónde se utilicen. Por ejemplo, el valor de la constante depende __LINE__de la línea utilizada en el código. Todas estas constantes mágicas se analizan en tiempo de compilación, a diferencia de las constantes regulares, que se analizan en tiempo de ejecución. Este tipo especial de constante no distingue entre mayúsculas y minúsculas. Aquí hay una lista de estas constantes:

PropiedadFunción
__LINE__El número de línea actual en el archivo.
__FILE__Ruta completa y nombre de archivo con análisis de enlaces simbólicos. Si esta constante se usa en un archivo incrustado, el resultado será el nombre del archivo incluido.
__DIR__La carpeta que contiene el archivo. Si se usa en un archivo incrustado, el resultado será el nombre de la carpeta que contiene el archivo incluido. Esta constante es equivalente a usar el dirname(__FILE__)‎. Esta carpeta no está precedida por una barra a menos que sea el directorio raíz.
__FUNCTION__Nombre de la función.
__CLASS__Nombre del producto. El nombre de la clase también incluye el espacio de nombres en el que se declara la clase (por ejemplo Foo\Bar). Tenga en cuenta que desde PHP 5.4 también __CLASS__funcionan en rasgos. Cuando esta constante se usa en métodos de atributos, da el __CLASS__nombre de la clase en la que se usa el atributo.
__TRAIT__Nombre del Atributo. El nombre del atributo incluye el espacio de nombres en el que se declara el atributo. (Ejemplo: Foo \ Bar).
__METHOD__El nombre de la función de clase.
__NAMESPACE__El nombre de dominio actual.
ClassName::classEl nombre de la clase completamente calificado. ver también‎::class

Registro de cambios

VersiónFunción
5.5.0Agrega magia con fuerza ‎::class
5.4.0agregar difícil __TRAIT__
5.3.0agregar constantes __DIR__y__NAMESPCE__
5.0.0agregar difícil __METHOD__
5.0.0Antes de esta versión, los valores de algunas constantes mágicas se escribían en minúsculas. Ahora todos distinguen entre mayúsculas y minúsculas (contienen los nombres tal como se divulgan).
4.3.0agregar constantes __FUNCTION__y__CLASS__
4.0.2La constante __FILE__ siempre contenía una ruta absoluta con análisis de enlaces simbólicos, mientras que en versiones anteriores esta constante contenía enlaces relativos en algunos casos.