defined()
La fonction defined() en PHP vérifie si une constante est définie ou non.
Ce que fait la fonction defined()
defined() est une fonction PHP intégrée qui vérifie si une constante portant un nom donné existe déjà. Elle retourne true si la constante est définie et false dans le cas contraire. Cette page couvre sa syntaxe, comment tester les constantes de classe et les constantes avec espaces de noms, le piège courant de la confondre avec isset(), et dans quels cas l'utiliser.
Une constante est un nom dont la valeur ne peut pas changer au cours d'une seule requête — créée avec define() ou le mot-clé const. Comme référencer une constante non définie génère une erreur (une exception Error en PHP 8+, un avis dans les versions plus anciennes), defined() vous permet de vérifier en premier et d'éviter cela.
Syntaxe
defined(string $constant_name): bool$constant_name— un string contenant le nom de la constante à rechercher. Notez que vous passez le nom sous forme de string ("GREETING"), et non la constante elle-même (GREETING).- Retourne
truesi une constante portant ce nom existe,falsesinon.
Passer la constante brute au lieu de son nom —
defined(GREETING)— tente d'évaluerGREETINGen premier, ce qui échoue si elle n'est pas définie. Citez toujours le nom entre guillemets.
Exemple de base
Comme GREETING a été créée à la ligne précédente, defined("GREETING") retourne true et le script affiche Hello, world!.
Vérification des constantes de classe et des constantes avec espaces de noms
defined() fonctionne également avec les constantes de classe et les constantes avec espaces de noms. Utilisez le nom entièrement qualifié sous forme de string :
<?php
const PI = 3.14;
class Circle {
const SHAPE = "round";
}
var_dump(defined("PI")); // bool(true)
var_dump(defined("Circle::SHAPE")); // bool(true) — class constant
var_dump(defined("Circle::MISSING"));// bool(false) — no such constant
var_dump(defined("UNDEFINED")); // bool(false)Pour les constantes de classe, la syntaxe est "ClassName::CONSTANT_NAME". Pour une constante avec espace de noms, fournissez son chemin complet, par exemple defined("App\\Config\\VERSION").
defined() vs. isset() : une confusion fréquente
defined() vérifie les constantes ; isset() vérifie les variables (ainsi que les clés de tableau et les propriétés d'objet). Elles ne sont pas interchangeables :
<?php
$name = "Alex"; // a variable
define("APP_NAME", "W3"); // a constant
var_dump(isset($name)); // bool(true) — variable exists
var_dump(defined("name")); // bool(false) — no constant called "name"
var_dump(defined("APP_NAME")); // bool(true) — constant existsSi vous vous retrouvez à vouloir utiliser defined("$variable"), vous souhaitez presque certainement utiliser isset() à la place.
Quand l'utiliser
- Protéger les constantes de configuration optionnelles. Les frameworks permettent souvent de prédéfinir des constantes comme
DEBUGouAPP_ENV; utilisezdefined()pour appliquer une valeur par défaut seulement lorsque l'utilisateur n'en a pas défini une. - Éviter les définitions en double. Redéfinir une constante existante avec
define()émet un avertissement, donc encadrez-le :if (!defined("API_KEY")) { define("API_KEY", "..."); }. - Détection de fonctionnalités. Les bibliothèques exposent des constantes marqueurs (par ex.
PHP_VERSION_ID) ;defined()confirme qu'une fonctionnalité basée sur une constante est disponible avant de l'utiliser.
Pour lire la valeur d'une constante une fois que vous savez qu'elle existe, associez defined() à constant(). Pour une vue d'ensemble sur la création de constantes, consultez PHP Constants et Class Constants.