Recherche…


Syntaxe

  • define (string $ name, mixed $ value [, bool $ case_insensitive = false])
  • const CONSTANT_NAME = VALUE;

Remarques

Les constantes sont utilisées pour stocker les valeurs qui ne sont pas censées être modifiées ultérieurement. Ils sont également souvent utilisés pour stocker les paramètres de configuration, en particulier ceux qui définissent l'environnement (dev / production).

Les constantes ont des types comme les variables, mais tous les types ne peuvent pas être utilisés pour initialiser une constante. Les objets et les ressources ne peuvent pas être utilisés comme valeurs pour les constantes. Les tableaux peuvent être utilisés comme constantes à partir de PHP 5.6

Certains noms de constantes sont réservés par PHP. Ceux-ci incluent true , false , null ainsi que de nombreuses constantes spécifiques au module.

Les constantes sont généralement nommées à l'aide de lettres majuscules.

Vérification si la constante est définie

Chèque simple

Pour vérifier si la constante est définie, utilisez la fonction defined . Notez que cette fonction ne se soucie pas de la valeur constante, elle se soucie uniquement si la constante existe ou non. Même si la valeur de la constante est null ou false la fonction retournera toujours 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 
}

Notez que la constante devient "visible" dans votre code uniquement après la ligne où vous l'avez définie:

<?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"
}

Obtenir toutes les constantes définies

Pour obtenir toutes les constantes définies, y compris celles créées par PHP, utilisez la fonction get_defined_constants :

<?php

$constants = get_defined_constants();
var_dump($constants); // pretty large list

Pour obtenir uniquement les constantes définies par votre application, appelez la fonction au début et à la fin de votre script (normalement après le processus d'amorçage):

<?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',
) 
*/

C'est parfois utile pour le débogage

Définition des constantes

Les constantes sont créées à l'aide de l'instruction const ou de la fonction define . La convention consiste à utiliser les lettres MAJUSCULES pour les noms de constante.

Définir une constante à l'aide de valeurs explicites

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

Définir constante en utilisant une autre constante

Si vous avez une constante, vous pouvez en définir une autre basée sur:

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 réservées

Certains noms de constantes sont réservés par PHP et ne peuvent être redéfinis. Tous ces exemples échoueront:

define("true", false); // internal constant
define("false", true); // internal constant
define("CURLOPT_AUTOREFERER", "something"); // will fail if curl extension is loaded

Et un avis sera émis:

Constant ... already defined in ...

Définit conditionnel

Si vous avez plusieurs fichiers où vous pouvez définir la même variable (par exemple, votre configuration principale, puis votre configuration locale), la syntaxe suivante peut vous aider à éviter les conflits:

defined("PI") || define("PI", 3.1415); // "define PI if it's not yet defined"

const vs define

define est une expression runtime alors que const une compilation.

Ainsi, define permet de define des valeurs dynamiques (appel de fonctions, variables, etc.) et même des noms dynamiques et des définitions conditionnelles. Il définit cependant toujours par rapport à l'espace de noms racine.

const est statique (car permet uniquement les opérations avec d'autres constantes, scalaires ou tableaux, et seulement un ensemble restreint d'entre elles, les expressions scalaires constantes , à savoir les opérateurs arithmétiques, logiques et de comparaison, ainsi que le déréférencement de tableaux) préfixé avec l'espace de noms actuellement actif.

const ne supporte que d'autres constantes et scalaires en tant que valeurs, et aucune opération.

Constantes de classe

Les constantes peuvent être définies dans les classes à l'aide d'un mot clé 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;

Ceci est utile pour stocker les types d'éléments.

<?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

Tableaux constants

Les tableaux peuvent être utilisés comme constantes simples et constantes de classe à partir de la version PHP 5.6:

Exemple de constante de classe

class Answer {
    const C = [2,4];
}

print Answer::C[1] . Answer::C[0]; // 42

Exemple constant simple

const ANSWER = [2,4];
print ANSWER[1] . ANSWER[0]; // 42

De même, depuis la version PHP 7.0, cette fonctionnalité a été portée sur la fonction define pour les constantes simples.

define('VALUES', [2, 3]);
define('MY_ARRAY', [
    1,
    VALUES,
]);

print MY_ARRAY[1][1]; // 3

Utiliser des constantes

Pour utiliser la constante, utilisez simplement son nom:

if (EARTH_IS_FLAT) {
    print "Earth is flat";
}

print APP_ENV_UPPERCASE;

ou si vous ne connaissez pas le nom de la constante à l'avance, utilisez la fonction 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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow