Constantes Mágicas

Existem nove constantes mágicas que mudam dependendo de onde são usadas. Por exemplo, o valor de __LINE__ depende da linha em que é usada no script. Todas essas constantes "mágicas" são resolvidas em tempo de compilação, ao contrário das constantes regulares, que são resolvidas em tempo de execução. Essas constantes especiais não diferenciam maiúsculas de minúsculas e são as seguintes:

Constantes Mágicas do PHP
Nome Descrição
__LINE__ O número da linha atual do arquivo.
__FILE__ O caminho completo e o nome do arquivo com links simbólicos resolvidos. Se usada dentro de um include, o nome do arquivo incluído será retornado.
__DIR__ O diretório do arquivo. Se usada dentro de um include, o diretório do arquivo incluído será retornado. Isso é equivalente a dirname(__FILE__). O nome do diretório não possui barra no final, a menos que seja o diretório raiz.
__FUNCTION__ O nome da função ou {closure} para funções anônimas.
__CLASS__ O nome da classe. O nome da classe inclui o namespace em que foi declarada (por exemplo, Foo\Bar). Quando usada em um método de trait, __CLASS__ é o nome da classe em que o trait for usado.
__TRAIT__ O nome do trait. O nome do trait inclui o namespace em que foi declarado (por exemplo, Foo\Bar).
__METHOD__ O nome do método da classe.
__NAMESPACE__ O nome do namespace atual.
ClassName::class O nome totalmente qualificado da classe.

add a note add a note

User Contributed Notes 3 notes

up
2
Rich
1 year ago
<?php

namespace My\App {
  class
Api {
    public static
fetch() {
      print
__FUNCTION__ . "\n"; // outputs fetch
     
print __METHOD__ . "\n"; // outputs My\App\Api::fetch
   
}
  }

 
Api::fetch();
}

namespace {
 
My\App\Api::fetch();
}
?>

__METHOD__ outputs a fully qualified method name; __FUNCTION__ when used in a method, outputs just the method name.
up
1
chris at ocproducts dot com
1 year ago
Note that __CLASS__ and __METHOD__ both reference the class the code is written in, not whatever the object class is. E.g. if you have an object of class B inheriting from class A, any usage of __CLASS__ in class A is going to give "A".
up
0
theking2 at king dot ma
2 years ago
If PHP is run inside a web server request there is an important difference between the __DIR__ constant and $_SERVER['DOCUMENT_ROOT'].

Where __DIR__ of a PHP script contained within a sub-folder will include the complete server path $_SERVER['DOCUMENT_ROOT'] will contain a server path up to the _root_ of the application. This can be helpful when for instance an auto-loader is defined in an include file sitting inside a sub-folder and where the classes are located in another folder at the root of the application.
To Top