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 que DIRECTORY_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


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow