define()
Découvrez comment define() en PHP crée des constantes, en quoi il diffère de const, quelles valeurs il accepte, et les pièges liés à la sensibilité à la casse et aux constantes de type tableau.
Ce que fait la fonction define()
La fonction define() crée une constante — une valeur nommée qui ne peut pas être modifiée une fois définie. Contrairement à une variable, une constante n'a pas de préfixe $, elle est globale à l'ensemble du script (y compris à l'intérieur des fonctions), et toute tentative de la redéfinir déclenche un avertissement plutôt que d'écraser silencieusement la valeur.
Utilisez define() lorsque vous voulez une source unique de vérité pour une valeur qui ne doit jamais changer à l'exécution : un indicateur de configuration, un numéro de version, un chemin de fichier ou un point de terminaison d'API.
Syntaxe
define(string $name, mixed $value, bool $case_insensitive = false): bool$name— le nom de la constante. Par convention, il s'écrit en majuscules avec des underscores (MAX_USERS), mais tout identifiant valide fonctionne.$value— la valeur à stocker. Les scalaires (int,float,string,bool) etnullont toujours été autorisés ; les tableaux sont devenus des valeurs valides à partir de PHP 7.0.$case_insensitive(optionnel) — historiquement, passertruepermettait de lire la constante quelle que soit la casse. Ce paramètre est déprécié depuis PHP 7.3 et supprimé en PHP 8.0, donc omettez-le et considérez les noms de constantes comme sensibles à la casse.
define() retourne true en cas de succès et false en cas d'échec.
Un exemple de base
Ici, define() crée une constante nommée GREETING contenant Hello, world!, puis echo l'affiche par son nom — sans $ et sans guillemets.
Stocker un tableau dans une constante
Depuis PHP 7.0, une constante peut contenir un tableau, ce qui est pratique pour des tables de correspondance fixes ou des listes d'options :
<?php
define("ROLES", ["admin", "editor", "viewer"]);
echo ROLES[1]; // editor
?>Vérifier avant d'utiliser une constante
Lire une constante non définie est une erreur en PHP 8.0+. Protégez-vous avec defined() pour que votre code se dégrade proprement :
<?php
if (!defined("APP_ENV")) {
define("APP_ENV", "production");
}
echo APP_ENV; // production
?>define() vs. const
PHP propose deux façons de déclarer une constante, et elles ne sont pas interchangeables :
| Caractéristique | define() | const |
|---|---|---|
| Quand elle s'exécute | À l'exécution | À la compilation |
| Utilisation conditionnelle / dans une boucle | Oui — peut se trouver dans un if/for | Non — doit être au niveau supérieur ou dans une classe |
| Nom dynamique | Oui — le nom peut être une variable | Non — le nom est fixe |
| Constantes de classe | Non | Oui |
Optez pour define() lorsque le nom ou la valeur est calculé, ou lorsque la déclaration doit être conditionnelle. Utilisez const pour des constantes simples toujours déclarées et pour les constantes de classe.
Pièges courants
- Pas de
$et pas de guillemets lors de la lecture. Écrivezecho GREETING;, pasecho $GREETING;niecho "GREETING";. - Redéfinir avertit, mais n'écrase pas. Un second
define("GREETING", ...)émet un avertissement et la valeur d'origine reste inchangée. - Les noms sont sensibles à la casse.
GREETINGetGreetingsont désormais deux constantes différentes, maintenant que le paramètre d'insensibilité à la casse a disparu. - Définissez-la une seule fois, tôt. Comme les constantes sont globales et permanentes, définissez-les près du début de votre script ou dans un fichier de configuration.
Conclusion
define() est le moyen, à l'exécution, de créer une valeur globale et immuable en PHP. Combinez-la avec defined() pour éviter les avertissements de redéfinition, préférez const pour les constantes fixes définies à la compilation et les constantes de classe, et consultez PHP Constants pour une vue d'ensemble.