O PHP nos oferece algumas constantes predefinidas que podem ser utilizadas em qualquer lugar da aplicação. Essas constantes são chamadas de constantes mágicas.
Elas são chamadas de constantes mágicas
porque o seu valor muda dependendo de onde elas são utilizadas, isso se deve ao fato, de que, elas obtêm o valor de onde elas estão no script,
por exemplo, a constante mágica __LINE__
vai retornar a linha do código onde essa constante foi escrita.
Essas constantes são case-insentitive, ou seja, tanto faz escrever __LINE__
como __line__
irá funcionar.
Até a data de escrita desse artigo, o PHP nos disponibiliza 9 constantes mágicas, a seguir um descrição de cada uma:
__LINE__
Obtém o número da linha do código onde é escrita a constante.
echo __LINE__;
// Resultado: 70
__FILE__
O caminho completo e o nome do arquivo com links simbólicos resolvidos. Se utilizado dentro de um include, o nome do arquivo incluído será retornado.
echo __FILE__;
// Resultado: /var/www/html/controller/articleController.php
__DIR__
O caminho do diretório onde é utilizada a constante. Se usado dentro de um include, o diretório do arquivo incluído será retornado.
echo __DIR__;
// Resultado: /var/www/html/controller
__FUNCTION__
O nome da função onde é utilizada a constante.
function carregaFoto()
{
echo 'O nome da minha função é ' . __FUNCTION__;
}
carregaFoto();
// Resultado: O nome da minha função é carregaFoto
__CLASS__
O nome da classe onde é utilizada a constante, isso inclui o namespace caso seja utilizado.
class Pessoa
{
public function getNome()
{
echo 'O nome da minha classe ' . __CLASS__;
}
}
$pessoa = new Pessoa();
$pessoa->getNome();
// Resultado: O nome da minha classe é Pessoa
__TRAIT__
O nome da trait onde é utilizada a constante, isso inclui o namespace caso seja utilizado.
trait Pessoa
{
public function getTipoPessoa()
{
echo 'O nome da minha trait é ' . __TRAIT__;
}
}
class Fisica
{
use Pessoa;
}
$pessoa = new Fisica();
$pessoa->getTipoPessoa();
// Resultado: O nome da minha trait é Pessoa
__METHOD__
O nome do método onde é utilizado a constante.
class Pessoa
{
public function getNome()
{
echo 'O nome do método é ' . __METHOD__;
}
}
$pessoa = new Pessoa();
$pessoa->getNome();
// Resultado: O nome do método é Pessoa::getNome
__NAMESPACE__
O nome do namespace onde é utilizado a constante.
namespace model
class Pessoa
{
public function getNome()
{
echo 'O nome da namespace é ' . __NAMESPACE__;
}
}
$pessoa = new modelPessoa();
$pessoa->getNome();
// Resultado: O nome da namespace é model
::class
Obtém o nome da classe, porém, é chamado da mesma forma que métodos e atributos static
, sem precisar instanciar a classe.
class Pessoa
{
}
echo 'O nome da classe é ' . Pessoa::class;
// Resultado: O nome da classe é Pessoa
Referência: https://www.php.net/manual/pt_BR/language.constants.predefined.php