PHP
Les constantes
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);