W3docs

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.4

Par 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 :

constdefine()
Évaluée àLa compilationL'exécution
Utilisable dans if/boucles/fonctionsNon (niveau supérieur / corps de classe uniquement)Oui
Le nom peut être construit dynamiquementNonOui (c'est simplement un argument string)
Fonctionne dans les classesOui (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; // 100

const, é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]; // editor

Consultez 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 :

ConstanteSe 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.56636

Pour 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 :

VariableConstante
Préfixe$nameNAME (sans signe)
RéaffectableOuiNon
PortéeLocale sauf si rendue globaleGlobale automatiquement
Sensible à la casseOuiOui

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 avec const est une erreur fatale. Les constantes sont en écriture unique.
  • Oublier que le $ a disparu. Écrire echo $SITE_NAME cherche 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 avec define() avant utilisation, ou protégez avec defined().

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.

Pratique

Pratique
Quelles sont les caractéristiques des constantes PHP ?
Quelles sont les caractéristiques des constantes PHP ?
Was this page helpful?