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".
Existem algumas 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:
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 dentro de 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. |
__PROPERTY__ |
Válido somente dentro de um gancho de propriedade. É igual ao nome da propriedade. |
__NAMESPACE__ |
O nome do namespace atual. |
ClassName::class |
O nome totalmente qualificado da classe. |
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".
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.
<?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.