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);


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow