Las constantes mágicas en PHP son constantes predefinidas. Están disponibles para cualquier script en el que se ejecuten y cambian según el lugar donde se utilicen. Todas estas constantes «mágicas» se resuelven en tiempo de compilación, a diferencia de las constantes regulares, que se resuelven en tiempo de ejecución.

Hay nueve constantes mágicas en PHP. Estas constantes especiales no distinguen entre mayúsculas y minúsculas.

__LINE__

Devuelve el número de línea actual del archivo. En el ejemplo siguiente se muestra cómo se puede utilizar esta constante mágica.

<?php
   $x="Hello World";
   echo "$x. The current Line number is " . __LINE__ . ".";
?>

Producirá el siguiente resultado:

Hello World. The current Line number is 5.

__FILE__

Esta constante mágica devuelve la ruta completa y el nombre de archivo del archivo. Si se usa dentro de una inclusión, se devuelve el nombre del archivo incluido. Echa un vistazo al siguiente ejemplo:

<?php
   $x="Hello World";
   echo "$x. Current PHP script name is " . __FILE__ . ".";
?>

Producirá el siguiente resultado:

Hello World. Current PHP script name is C:\xampp\htdocs\hello.php.

__DIR__

Esta constante mágica devuelve el directorio del archivo. Si se usa dentro de una inclusión, se devuelve el directorio del archivo incluido. Esto es equivalente a «dirname(__FILE__)». Este nombre de directorio no tiene una barra diagonal final a menos que sea el directorio raíz. Vea el siguiente ejemplo:

<?php
   $x="Hello World";
   echo "$x. Directory of the Current PHP script name is " . __DIR__ . ".";
?>

Mostrará el siguiente resultado en el navegador:

Hello World. Directory of the Current PHP script name is C:\xampp\htdocs.

__FUNCTION__

Esta constante mágica devuelve el nombre de la función en la que se usa la constante, o {closure} para funciones anónimas. En el siguiente ejemplo se muestra cómo funciona:

<?php
   function hello(){    
      $x="Hello World";  
      echo "$x. The function name is ". __FUNCTION__ . "";   
   } 
   hello();   
?>

Producirá el siguiente resultado:

Hello World. The function name is hello

Si esta constante mágica se usa fuera de la función, entonces dará una salida en blanco.

__CLASS__

Esta constante devuelve el nombre de una clase. El nombre de la clase incluye el espacio de nombres en el que se declaró. Vea el siguiente ejemplo:

<?php
   class myclass {    
      public function __construct() {    
         echo "Inside the constructor of ". __CLASS__ . PHP_EOL;    
      }    
      function getClassName(){                      
         echo "from an instance method of " . __CLASS__ . "";   
      }    
   }    
   $obj = new myclass;    
   $obj->getClassName();    
?>

Producirá el siguiente resultado:

Inside the constructor of myclass
from an instance method of myclass

__METHOD__

La constante __METHOD__ devuelve el nombre del método de clase. En el siguiente ejemplo se muestra cómo funciona:

<?php
   class myclass {    
      public function __construct() {    
         echo "Calling " . __METHOD__ . " of " . __CLASS__ ."<br>";
      }    
      function mymethod(){                      
         echo "Calling " . __METHOD__ . " of " . __CLASS__ ."";
      }    
   }    
   $obj = new myclass;    
   $obj->mymethod();
?>

Producirá el siguiente resultado:

Calling myclass::__construct of myclass
Calling myclass::mymethod of myclass

__TRAIT__

Devuelve el nombre del trait . El nombre del trait incluye el espacio de nombres en el que se declaró. En PHP, los trait son un mecanismo para la reutilización de código. Un trait  es similar a una clase, pero solo está destinado a agrupar la funcionalidad de una manera detallada y coherente. No es posible crear una instancia de un trait por sí solo.

Echa un vistazo al siguiente ejemplo:

<?php
   trait mytrait {
      public function hello() {
         echo "Hello World from " . __TRAIT__ ."";
      }
   }
   class myclass {
      use mytrait;
   }
   $obj = new myclass();
   $obj->hello();
?>

Producirá el siguiente resultado:

Hello World from mytrait

__NAMESPACE__

Esta constante devuelve el nombre del espacio de nombres actual. En PHP, los espacios de nombres nos permiten usar clases/funciones/constantes del mismo nombre en diferentes contextos sin ningún conflicto, encapsulando así estos elementos. Un espacio de nombres es una agrupación lógica de clases/funciones en función de su relevancia.

El siguiente ejemplo muestra cómo se puede utilizar esta constante mágica:

<?php
   namespace myspace;
   class myclass {    
      public function __construct() {    
         echo "Name of the class: " . __CLASS__ . " in " . __NAMESPACE__ . ""; 
      }     
   }    
   $class_name = __NAMESPACE__ . '\myclass';    
   $a = new $class_name;   
?>

Producirá el siguiente resultado:

Name of the class: myspace\myclass in myspace

ClassName::class

A diferencia de las otras constantes mágicas, esta constante mágica no comienza ni termina con el guión bajo doble (__). Devuelve el nombre completo de la clase.

El siguiente ejemplo muestra cómo se puede utilizar esta constante mágica:

<?php
   namespace myspace;
   class myclass {    
      public function __construct() {    
         echo "Name of the class: " . myclass::class ;
      }     
   }
   use myspace;   
   $a = new myclass; 
?>

Producirá el siguiente resultado:

Name of the class: myspace\myclass