PHP
Constantes mágicas
Buscar..
Observaciones
Las constantes mágicas se distinguen por su forma __CONSTANTNAME__
.
Actualmente hay ocho constantes mágicas que cambian dependiendo de dónde se usan. Por ejemplo, el valor de __LINE__
depende de la línea que se usa en su script.
Estas constantes especiales no distinguen entre mayúsculas y minúsculas y son las siguientes:
Nombre | Descripción |
---|---|
__LINE__ | El número de línea actual del archivo. |
__FILE__ | La ruta completa y el nombre del archivo con los enlaces simbólicos resueltos. Si se utiliza dentro de una inclusión, se devuelve el nombre del archivo incluido. |
__DIR__ | El directorio del archivo. Si se utiliza 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 inclinada a menos que sea el directorio raíz. |
__FUNCTION__ | El nombre de la función actual |
__CLASS__ | El nombre de la clase. El nombre de la clase incluye el espacio de nombres en el que se declaró (por ejemplo, Foo\Bar ). Cuando se usa en un método de rasgo, __CLASS__ es el nombre de la clase en que se usa el rasgo. |
__TRAIT__ | El nombre del rasgo. El nombre del rasgo incluye el espacio de nombres en el que se declaró (por ejemplo, Foo\Bar ). |
__METHOD__ | El nombre del método de clase. |
__NAMESPACE__ | El nombre del espacio de nombres actual. |
El caso de uso más común para estas constantes es la depuración y el registro.
Diferencia entre __FUNCTION__ y __METHOD__
__FUNCTION__
devuelve solo el nombre de la función, mientras que __METHOD__
devuelve el nombre de la clase junto con el nombre de la función:
<?php
class trick
{
public function doit()
{
echo __FUNCTION__;
}
public function doitagain()
{
echo __METHOD__;
}
}
$obj = new trick();
$obj->doit(); // Outputs: doit
$obj->doitagain(); // Outputs: trick::doitagain
Diferencia entre __CLASS__, get_class () y get_called_class ()
__CLASS__
magic constant devuelve el mismo resultado que la función get_class()
llamada sin parámetros y ambas devuelven el nombre de la clase donde se definió (es decir, donde escribió la función llamada / nombre constante).
Por el contrario, las get_class($this)
y get_called_class()
llaman, devolverán el nombre de la clase real de la que se creó una instancia:
<?php
class Definition_Class {
public function say(){
echo '__CLASS__ value: ' . __CLASS__ . "\n";
echo 'get_called_class() value: ' . get_called_class() . "\n";
echo 'get_class($this) value: ' . get_class($this) . "\n";
echo 'get_class() value: ' . get_class() . "\n";
}
}
class Actual_Class extends Definition_Class {}
$c = new Actual_Class();
$c->say();
// Output:
// __CLASS__ value: Definition_Class
// get_called_class() value: Actual_Class
// get_class($this) value: Actual_Class
// get_class() value: Definition_Class
Constantes de archivo y directorio
Archivo actual
Puede obtener el nombre del archivo PHP actual (con la ruta absoluta) utilizando la constante mágica __FILE__
. Esto se utiliza más a menudo como una técnica de registro / depuración.
echo "We are in the file:" , __FILE__ , "\n";
Directorio actual
Para obtener la ruta absoluta al directorio donde se encuentra el archivo actual, use la constante mágica __DIR__
.
echo "Our script is located in the:" , __DIR__ , "\n";
Para obtener la ruta absoluta al directorio donde se encuentra el archivo actual, use dirname(__FILE__)
.
echo "Our script is located in the:" , dirname(__FILE__) , "\n";
Obtener el directorio actual a menudo es usado por marcos de PHP para establecer un directorio base:
// index.php of the framework
define(BASEDIR, __DIR__); // using magic constant to define normal constant
// somefile.php looks for views:
$view = 'page';
$viewFile = BASEDIR . '/views/' . $view;
Separadores
El sistema de Windows entiende perfectamente las rutas
/
in, de modo queDIRECTORY_SEPARATOR
se usa principalmente al analizar rutas.
Además de las constantes mágicas, PHP también agrega algunas constantes fijas para trabajar con rutas:
- Constante
DIRECTORY_SEPARATOR
para separar directorios en una ruta. Toma valor/
en * nix, y\
en Windows. El ejemplo con vistas se puede reescribir con:
$view = 'page';
$viewFile = BASEDIR . DIRECTORY_SEPARATOR .'views' . DIRECTORY_SEPARATOR . $view;
- Rara vez se utiliza la constante
PATH_SEPARATOR
para separar las rutas en la$PATH
entorno$PATH
. Es;
en Windows,:
de otro modo