Les constantes magiques sont des mots-clés qui sont remplacés par des
informations sur leur propre emplacement dans le code source : leur
fichier et leur ligne, ainsi que la fonction, la classe, le trait,
l'espace de noms ou le hook de propriété qui les entourent.
Malgré leur nom, ce ne sont pas de vraies constantes :
defined() et constant() ne les
reconnaissent pas, et une constante du même nom créée avec
define() n'a aucun effet sur elles. Elles sont
insensibles à la casse. Lorsqu'elles sont utilisées en dehors du
contexte auquel elles se rapportent (par exemple
__CLASS__ en dehors d'une classe), elles sont
remplacées par une chaîne vide.
| Nom | Description |
|---|---|
__LINE__ |
La ligne sur laquelle elle est écrite. |
__FILE__ |
Le chemin complet et le nom du fichier dans lequel elle est écrite, avec les liens symboliques résolus. |
__DIR__ |
Le dossier du fichier, équivalent à
dirname(__FILE__). Il ne contient pas de slash
final, sauf s'il s'agit du dossier racine.
|
__FUNCTION__ |
Le nom de la fonction dans laquelle elle est écrite, incluant son
espace de noms (par exemple Foo\bar).
À l'intérieur d'une méthode, seul le nom de la méthode.
Pour les fonctions anonymes, un nom généré par le moteur qui inclut
l'endroit où la fermeture a été définie (à partir de PHP 8.4.0 ;
auparavant {closure}).
|
__CLASS__ |
Le nom de la classe dans laquelle elle est écrite, incluant son
espace de noms (par exemple Foo\Bar).
À l'intérieur d'un trait, le nom de la classe qui utilise le trait.
Pour les classes
anonymes, un nom généré par le moteur.
Pour obtenir le nom de la classe sur laquelle une méthode a été
appelée, utiliser
static::class.
|
__TRAIT__ |
Le nom du trait, incluant son espace de noms (par exemple
Foo\Bar).
|
__METHOD__ |
Le nom de la classe et de la méthode dans laquelle elle est écrite
(par exemple Foo\Bar::baz).
À l'intérieur d'un trait, le nom du trait est utilisé à la place du
nom de la classe.
En dehors d'une méthode, identique à __FUNCTION__.
|
__PROPERTY__ |
Le nom de la propriété, lorsqu'elle est utilisée à l'intérieur d'un hook de propriété. À partir de PHP 8.4.0. |
__NAMESPACE__ |
Le nom de l'espace de noms courant. |
Exemple #1 Utilisation des constantes magiques
<?php
namespace App;
function helper()
{
echo __FUNCTION__, "\n";
echo __METHOD__, "\n";
}
trait Greets
{
public function greet()
{
echo __CLASS__, "\n";
echo __TRAIT__, "\n";
echo __METHOD__, "\n";
echo __FUNCTION__, "\n";
}
}
class Greeter
{
use Greets;
}
helper();
(new Greeter)->greet();
echo __NAMESPACE__, "\n";L'exemple ci-dessus va afficher :
App\helper App\helper App\Greeter App\Greets App\Greets::greet greet App