Les constantes PHP : un guide approfondi
Une constante PHP est une valeur qui ne peut pas être modifiée une fois définie. Découvrez comment les définir et les utiliser efficacement.
Une constante en PHP est une valeur nommée qui ne peut pas être modifiée une fois définie. Contrairement aux variables, les constantes ne sont pas précédées d'un $, elles sont automatiquement disponibles partout dans le script (sans règles de portée), et toute tentative de réaffectation est soit ignorée, soit provoque une erreur. Elles sont idéales pour les valeurs fixes telles que les paramètres de configuration, les clés API, les numéros de version et les limites mathématiques.
Ce chapitre explique comment définir des constantes de deux façons différentes, les différences pratiques entre elles, les constantes magiques, les constantes de classe et les pièges courants.
Définir une constante
PHP vous offre deux outils : la fonction define() et le mot-clé const. Les deux prennent un nom et une valeur.
<?php
// Using define()
define("SITE_NAME", "W3docs");
// Using the const keyword
const VERSION = "8.4";
echo SITE_NAME; // W3docs
echo PHP_EOL;
echo VERSION; // 8.4Par convention, les noms de constantes sont écrits en MAJUSCULES, mais PHP ne l'impose pas. Un nom valide commence par une lettre ou un underscore, suivi de lettres, chiffres ou underscores — exactement comme un nom de variable, mais sans le $.
Notez que vous référencez une constante par son nom nu (SITE_NAME), sans $. Les constantes sont sensibles à la casse : SITE_NAME et site_name sont deux constantes différentes.
const vs define()
Elles produisent le même type de constante, mais se comportent différemment au niveau du langage. Savoir laquelle utiliser évite des bugs subtils :
const | define() | |
|---|---|---|
| Évaluée à | La compilation | L'exécution |
Utilisable dans if/boucles/fonctions | Non (niveau supérieur / corps de classe uniquement) | Oui |
| Le nom peut être construit dynamiquement | Non | Oui (c'est simplement un argument string) |
| Fonctionne dans les classes | Oui (définit une constante de classe) | Non |
Comme define() s'exécute au moment de l'exécution, c'est le bon choix lorsqu'une constante ne doit exister que sous certaines conditions :
<?php
if (!defined("DEBUG")) {
define("DEBUG", true);
}
// define() can build the name dynamically — const cannot:
$key = "MAX_USERS";
define($key, 100);
echo MAX_USERS; // 100const, évalué à la compilation, est plus rapide et constitue le choix conventionnel pour les constantes de niveau supérieur dans le code moderne.
Vérifier et lire des constantes
Avant d'utiliser une constante dont l'existence est incertaine, vérifiez-la avec defined(). Pour récupérer la valeur d'une constante quand vous n'avez que son nom sous forme de string, utilisez constant() :
<?php
define("TIMEOUT", 30);
if (defined("TIMEOUT")) {
echo constant("TIMEOUT"); // 30
}Les constantes peuvent contenir des tableaux
Depuis PHP 7, les constantes ne sont pas limitées aux scalaires (int, float, string, bool) — elles peuvent aussi contenir des tableaux. C'est pratique pour les tables de correspondance fixes :
<?php
const ALLOWED_ROLES = ["admin", "editor", "viewer"];
echo ALLOWED_ROLES[1]; // editorConsultez PHP Data Types pour savoir ce que chaque type de valeur peut stocker.
Les constantes magiques
PHP est livré avec des constantes magiques — des noms prédéfinis dont la valeur change selon l'endroit où ils sont utilisés. Elles s'écrivent avec des doubles underscores au début et à la fin :
| Constante | Se résout en |
|---|---|
__LINE__ | Le numéro de ligne actuel |
__FILE__ | Le chemin complet du fichier |
__DIR__ | Le répertoire du fichier |
__FUNCTION__ | Le nom de la fonction actuelle |
__CLASS__ | Le nom de la classe actuelle |
__METHOD__ | Le nom de la méthode de classe |
<?php
function greet() {
echo "Called from: " . __FUNCTION__ . PHP_EOL;
echo "On line: " . __LINE__ . PHP_EOL;
}
greet();Les constantes de classe
Les constantes déclarées à l'intérieur d'une classe appartiennent à la classe elle-même, et non à une instance. Déclarez-les avec const et accédez-y avec l'opérateur :: (résolution de portée) :
<?php
class Circle {
const PI = 3.14159;
public function area(float $r): float {
return self::PI * $r * $r;
}
}
echo Circle::PI; // 3.14159
echo PHP_EOL;
echo (new Circle)->area(2); // 12.56636Pour un examen plus approfondi, lisez PHP Class Constants.
Constantes vs variables
Les deux servent des rôles différents. Une variable contient des données censées changer ; une constante verrouille une valeur en place. Les principales différences :
| Variable | Constante | |
|---|---|---|
| Préfixe | $name | NAME (sans signe) |
| Réaffectable | Oui | Non |
| Portée | Locale sauf si rendue globale | Globale automatiquement |
| Sensible à la casse | Oui | Oui |
Utilisez une constante chaque fois qu'une valeur doit rester fixe pour toute la durée d'exécution — drapeaux de configuration, limites, strings fixes — afin qu'elle ne puisse pas être accidentellement écrasée ailleurs.
Pièges courants
- Redéfinir une constante. Appeler
define()deux fois sur le même nom déclenche un avertissement et conserve la première valeur ; redéclarer avecconstest une erreur fatale. Les constantes sont en écriture unique. - Oublier que le
$a disparu. Écrireecho $SITE_NAMEcherche une variable indéfinie, pas votre constante. - Constantes indéfinies. En PHP 8+, utiliser un mot nu indéfini comme constante lève une
Error. Définissez toujours avecdefine()avant utilisation, ou protégez avecdefined().
Conclusion
Les constantes PHP vous offrent un moyen sûr de stocker des valeurs qui ne doivent jamais changer : définissez-les avec const pour les valeurs ordinaires de niveau supérieur ou define() lorsque vous avez besoin d'une logique à l'exécution ou d'un nom dynamique, regroupez les données fixes dans des constantes de tableau ou de classe, et appuyez-vous sur les constantes magiques intégrées pour le débogage. Bien utilisées, elles centralisent la configuration en un seul endroit et empêchent les réaffectations accidentelles.