PHP
Constantes
Buscar..
Sintaxis
- define (cadena $ nombre, valor mezclado de $ [, bool $ case_insensitive = false])
- const CONSTANT_NAME = VALUE;
Observaciones
Las constantes se utilizan para almacenar los valores que no se deben cambiar más adelante. También se utilizan a menudo para almacenar los parámetros de configuración, especialmente aquellos que definen el entorno (desarrollo / producción).
Las constantes tienen tipos como variables pero no todos los tipos se pueden usar para inicializar una constante. Los objetos y los recursos no se pueden utilizar como valores para constantes en absoluto. Las matrices se pueden usar como constantes a partir de PHP 5.6
Algunos nombres constantes están reservados por PHP. Estos incluyen true
, false
, null
así como muchas constantes específicas del módulo.
Las constantes son usualmente nombradas usando letras mayúsculas.
Comprobando si se define constante
Simple cheque
Para verificar si la constante está definida use la función defined
. Tenga en cuenta que a esta función no le importa el valor de la constante, solo le importa si la constante existe o no. Incluso si el valor de la constante es null
o false
la función seguirá siendo true
.
<?php
define("GOOD", false);
if (defined("GOOD")) {
print "GOOD is defined" ; // prints "GOOD is defined"
if (GOOD) {
print "GOOD is true" ; // does not print anything, since GOOD is false
}
}
if (!defined("AWESOME")) {
define("AWESOME", true); // awesome was not defined. Now we have defined it
}
Tenga en cuenta que la constante se vuelve "visible" en su código solo después de la línea donde lo ha definido:
<?php
if (defined("GOOD")) {
print "GOOD is defined"; // doesn't print anyhting, GOOD is not defined yet.
}
define("GOOD", false);
if (defined("GOOD")) {
print "GOOD is defined"; // prints "GOOD is defined"
}
Obteniendo todas las constantes definidas
Para obtener todas las constantes definidas, incluidas las creadas por PHP, use la función get_defined_constants
:
<?php
$constants = get_defined_constants();
var_dump($constants); // pretty large list
Para obtener solo las constantes que definió su aplicación, llame a la función al principio y al final de su script (normalmente después del proceso de arranque):
<?php
$constants = get_defined_constants();
define("HELLO", "hello");
define("WORLD", "world");
$new_constants = get_defined_constants();
$myconstants = array_diff_assoc($new_constants, $constants);
var_export($myconstants);
/*
Output:
array (
'HELLO' => 'hello',
'WORLD' => 'world',
)
*/
A veces es útil para la depuración.
Definiendo constantes
Las constantes se crean utilizando la sentencia const
o la función define
. La convención es usar letras MAYÚSCULAS para nombres constantes.
Definir constante utilizando valores explícitos.
const PI = 3.14; // float
define("EARTH_IS_FLAT", false); // boolean
const "UNKNOWN" = null; // null
define("APP_ENV", "dev"); // string
const MAX_SESSION_TIME = 60 * 60; // integer, using (scalar) expressions is ok
const APP_LANGUAGES = ["de", "en"]; // arrays
define("BETTER_APP_LANGUAGES", ["lu", "de"]); // arrays
Definir constante utilizando otra constante.
Si tienes una constante puedes definir otra basada en ella:
const TAU = PI * 2;
define("EARTH_IS_ROUND", !EARTH_IS_FLAT);
define("MORE_UNKNOWN", UNKNOWN);
define("APP_ENV_UPPERCASE", strtoupper(APP_ENV)); // string manipulation is ok too
// the above example (a function call) does not work with const:
// const TIME = time(); # fails with a fatal error! Not a constant scalar expression
define("MAX_SESSION_TIME_IN_MINUTES", MAX_SESSION_TIME / 60);
const APP_FUTURE_LANGUAGES = [-1 => "es"] + APP_LANGUAGES; // array manipulations
define("APP_BETTER_FUTURE_LANGUAGES", array_merge(["fr"], APP_BETTER_LANGUAGES));
Constantes reservadas
Algunos nombres constantes están reservados por PHP y no pueden ser redefinidos. Todos estos ejemplos fallarán:
define("true", false); // internal constant
define("false", true); // internal constant
define("CURLOPT_AUTOREFERER", "something"); // will fail if curl extension is loaded
Y se emitirá un Aviso:
Constant ... already defined in ...
Condicional define
Si tiene varios archivos donde puede definir la misma variable (por ejemplo, su configuración principal, su configuración local), la siguiente sintaxis puede ayudar a evitar conflictos:
defined("PI") || define("PI", 3.1415); // "define PI if it's not yet defined"
const
vs define
define
es una expresión en tiempo de ejecución, mientras que const
un tiempo de compilación uno.
Por lo tanto, define
permite valores dinámicos (es decir, llamadas a funciones, variables, etc.) e incluso nombres dinámicos y definiciones condicionales. Sin embargo, siempre se está definiendo en relación con el espacio de nombres raíz.
const
es estática (como en permite solo operaciones con otras constantes, escalares o matrices, y solo un conjunto restringido de ellas, las denominadas expresiones escalares constantes , es decir, operadores aritméticos, lógicos y de comparación, así como la eliminación de referencias de matrices), pero son espacios de nombres automáticamente prefijado con el espacio de nombres actualmente activo.
const
solo admite otras constantes y escalares como valores y no operaciones.
Constantes de clase
Las constantes se pueden definir dentro de las clases usando una palabra clave const
.
class Foo {
const BAR_TYPE = "bar";
// reference from inside the class using self::
public function myMethod() {
return self::BAR_TYPE;
}
}
// reference from outside the class using <ClassName>::
echo Foo::BAR_TYPE;
Esto es útil para almacenar tipos de artículos.
<?php
class Logger {
const LEVEL_INFO = 1;
const LEVEL_WARNING = 2;
const LEVEL_ERROR = 3;
// we can even assign the constant as a default value
public function log($message, $level = self::LEVEL_INFO) {
echo "Message level " . $level . ": " . $message;
}
}
$logger = new Logger();
$logger->log("Info"); // Using default value
$logger->log("Warning", $logger::LEVEL_WARNING); // Using var
$logger->log("Error", Logger::LEVEL_ERROR); // using class
Matrices constantes
Las matrices se pueden usar como constantes simples y constantes de clase desde la versión PHP 5.6 en adelante:
Ejemplo de clase constante
class Answer {
const C = [2,4];
}
print Answer::C[1] . Answer::C[0]; // 42
Ejemplo de constante llana
const ANSWER = [2,4];
print ANSWER[1] . ANSWER[0]; // 42
También desde la versión PHP 7.0 esta funcionalidad fue portada a la función de define
para constantes simples.
define('VALUES', [2, 3]);
define('MY_ARRAY', [
1,
VALUES,
]);
print MY_ARRAY[1][1]; // 3
Usando constantes
Para usar la constante simplemente usa su nombre:
if (EARTH_IS_FLAT) {
print "Earth is flat";
}
print APP_ENV_UPPERCASE;
o si no conoce el nombre de la constante de antemano, use la función constant
:
// this code is equivalent to the above code
$const1 = "EARTH_IS_FLAT";
$const2 = "APP_ENV_UPPERCASE";
if (constant($const1)) {
print "Earth is flat";
}
print constant($const2);