W3docs

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 true si une constante portant ce nom existe, false sinon.

Passer la constante brute au lieu de son nom — defined(GREETING) — tente d'évaluer GREETING en premier, ce qui échoue si elle n'est pas définie. Citez toujours le nom entre guillemets.

Exemple de base

php— editable, runs on the server

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 exists

Si 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 DEBUG ou APP_ENV ; utilisez defined() 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.

Pratique

Pratique
Que fait la fonction defined() en PHP ?
Que fait la fonction defined() en PHP ?
Was this page helpful?