Menu

Constantes PHP : define() ou const et constantes magiques

Une constante PHP est un nom pour une valeur qui ne peut pas changer : const MAX_USERS = 100; ou define('MAX_USERS', 100);. define ou const, constantes tableaux, constantes de classe avec self::, vérification avec defined(), et les constantes magiques __LINE__, __FILE__, __DIR__ et __CLASS__.

Cette page contient des éditeurs exécutables - modifiez, exécutez et voyez la sortie instantanément.

Une constante est un nom pour une valeur qui ne change jamais pendant l'exécution du script. Déclarez-la avec const MAX_USERS = 100; ou define('MAX_USERS', 100);, puis utilisez le nom seul, sans $.

Par convention, les noms de constantes s'écrivent en UPPER_SNAKE_CASE. Elles sont globales : une constante déclarée en haut d'un fichier est visible dans toutes les fonctions sans global.

define() ou const

Les deux créent une constante, mais pas au même moment. const est résolue quand PHP compile le fichier, define() s'exécute comme n'importe quel appel de fonction.

constdefine()
Dans un if, une boucle, une fonctionNonOui
Nom construit à partir d'une variableNonOui
Constantes de classeOuiNon
La valeur peut être une expressionOui, de constantes et de littérauxOui, n'importe quelle valeur
Placée automatiquement dans le namespaceOuiNon (donnez le nom complet)

Utilisez const par défaut, car elle est plus courte et vérifiée à la compilation. Utilisez define() quand la constante dépend d'une condition ou d'un nom calculé.

Une constante ne peut pas être modifiée

Affecter une valeur à une constante est une erreur de syntaxe :

<?php
const LIMIT = 10;
LIMIT = 20;
PHP Parse error:  syntax error, unexpected token "=" in /home/index.php on line 3

Définir deux fois la même constante n'est pas une erreur, mais PHP affiche un warning et garde la première valeur :

<?php
define("LIMIT", 10);
define("LIMIT", 20);
echo LIMIT; // 10
Warning: Constant LIMIT already defined in /home/index.php on line 3

Quand une valeur peut déjà être définie (par exemple dans un fichier de configuration chargé plusieurs fois), vérifiez d'abord avec defined() :

Constantes tableaux

Une constante peut contenir un tableau. Vous pouvez le lire avec NAME[key], le parcourir et le transmettre, mais pas le modifier.

Constantes de classe

Dans une classe, const déclare une constante qui appartient à la classe. Lisez-la avec ClassName::NAME depuis l'extérieur et self::NAME ou static::NAME depuis l'intérieur. Les constantes de classe peuvent avoir une visibilité, être final et, depuis PHP 8.3, déclarer un type.

Un groupe de constantes de classe liées comme STATUS_NEW et STATUS_PAID s'écrit souvent mieux sous forme d'enum, qui empêche aussi de faire circuler des valeurs invalides.

Constantes magiques : LINE, FILE, DIR et autres

Les constantes magiques changent de valeur selon l'endroit où elles apparaissent. Elles sont remplies à la compilation.

La plus utilisée est __DIR__, le dossier du fichier courant. Construire les chemins d'inclusion à partir d'elle les fait fonctionner quel que soit le dossier depuis lequel le script a été lancé : require __DIR__ . '/config.php';. Voir include et require pour le modèle complet.

Les constantes natives à connaître

PHP définit beaucoup de constantes. Celles-ci reviennent tout le temps :

PHP_EOL est la fin de ligne du système sur lequel tourne PHP ("\n" sur Linux et macOS, "\r\n" sur Windows). Elle sert pour le texte écrit dans des fichiers et le terminal ; dans une sortie HTML, un saut de ligne ne se voit pas, utilisez donc <br>.

Questions fréquentes

Quelle est la différence entre define() et const en PHP ?

const est une construction du langage résolue à la compilation du fichier : elle fonctionne au niveau principal et dans les classes, mais pas dans un if, une boucle ou une fonction. define() est une fonction appelée à l'exécution, elle fonctionne donc partout et son nom peut être construit à partir d'une variable, mais elle ne peut pas déclarer de constantes de classe.

Une constante PHP peut-elle être un tableau ?

Oui. const COLORS = ['red', 'green']; et define('COLORS', ['red', 'green']); fonctionnent tous deux, et vous lisez un élément avec COLORS[0]. Le tableau ne peut plus être modifié ensuite.

Comment vérifier si une constante est définie en PHP ?

Utilisez defined('NAME'), qui prend le nom sous forme de chaîne et renvoie true ou false. Un modèle courant est if (!defined('APP_ENV')) { define('APP_ENV', 'production'); }. Pour une constante de classe, passez 'ClassName::NAME'.

Que sont les constantes magiques en PHP ?

Des constantes dont la valeur dépend de l'endroit où elles sont écrites : __LINE__ (ligne actuelle), __FILE__ (chemin complet du fichier), __DIR__ (son dossier), __FUNCTION__, __CLASS__, __METHOD__ et __NAMESPACE__. Elles s'écrivent avec deux tirets bas de chaque côté et ne sont pas sensibles à la casse.

Illustration des langages de programmation de Coddy

Apprendre à coder avec Coddy

COMMENCER