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