PHP Définition des constantes


Exemple

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.