PHP para Iniciantes: Constantes Mágicas
Já falamos sobre o básico de constantes e as pré-definidas, onde soltei alguns spoiler sobre constantes mágicas. Lembre-se: toda constante mágica é uma constante pré-definida.
Então por que tem um artigo só sobre isso, Kiko?
Porque as mágicas tem suas particularidades, como escopos e contextos. Diferente das outras constantes, que são interpretadas durante a execução do script, as mágicas são interpretadas durante a compilação, ou seja, no momento em que você o interpretador aciona a constante mágica é que seu valor é definido.
Então não é pré-definida?!
É confuso mesmo, nem eu sei explicar muito bem, mas dá pra entender que sim! Pois você não consegue definir uma constante mágica. Dará como já definida, logo, pré-definida.
Ba-dum-tis
Então quais constantes mágicas existem, Kiko?
Lá na documentação oficial do PHP tem uma tabelinha com toda a lista de constantes. Aparentemente, essa página ainda não existe na versão em pt-BR, então vou traduzir tudo e jogar mais abaixo (depois eu vejo como faço pra contribuir com a tradução, rs):
Constante | Descrição |
__LINE__ | O número da linha atual do script onde está sendo acionado. |
__FILE__ | O caminho absoluto, incluindo o nome, do script onde está sendo acionado, já tratado pelos links simbólicos do sistema. |
__DIR__ | O diretório do script onde está sendo adicionado. Equivalente a dirname(__FILE__) . O diretório não termina com barra (/ ), exceto se for a raiz (/ ). |
__FUNCTION__ | O nome da função ou {closure} em funções anônimas. |
__CLASS__ | O nome da classe incluindo seu namespace, se houver (ex: MeuApp\Exemplo ). Quando é usado dentro de um método de uma trait , será o nome da classe onde o método está sendo acionado. Equivalente a Classe::class (ex: MeuApp\Exemplo::class ) |
__TRAIT__ | O nome da trait incluindo seu namespace, se houver (ex: MeuApp\ExemploTrait ). |
__METHOD__ | O nome do método com a referência da classe onde ele está (ex: MeuApp\Exemplo::meuMetodo . Se acionado dentro de uma função, retorna o mesmo que __FUNCTION__ . |
__NAMESPACE__ | O nome do namespace atual (ex: dentro da classe MeuApp\Exemplo , viria MeuApp ). |
Na documentação também é citado como constante mágica o Classe::class
, mas vamos concordar que isso parece mais uma informação estática da classe, concorda? Até a escrita é o acesso a uma propriedade estática ou constante de classe, diferente da escrita das constantes mágicas. Como é citado lá, vou deixar apenas a informação de que é o mesmo que __CLASS__
, exceto que não é sobre a classe atual e sim sobre o nome da classe Classe
incluindo seu namespace.
É muito utilizada em frameworks como o Laravel. Por exemplo:
<?php
namespace App\Services;
class PosterService
{
public function imprimaOi(): void
{
echo "oi" . PHP_EOL;
}
}
Quando você quer criar uma nova instância dessa classe no container do Laravel, você só precisa fazer algo assim:
<?php
use App\Services\PosterService; // importante para reduzir a chamada
// ... código blablabla
$posterService = app(PosterService::class);
$posterService->imprimaOi();
// blablabla código ...
Naquele momento, app(PosterService::class)
, estamos acionando app('App\Services\PosterService')
.
Ok, Kiko... Laravel? Framework? Service? O que é tudo isso?
Só um spoiler de coisas que você vai poder explorar beeeeem mais pra frente. Uma dica que eu gosto de deixar para todo iniciante é: não aprenda framework no começo. Aprenda PHP. Depois aprenda padrões de desenvolvimento, os famosos Patterns, e aí sim se joga nos frameworks. Eles estão lá para ajudar, mas aprender somente eles pode limitar bastante sua visão, beleza?
E por hoje é só! Curtiu? Comenta e compartilha! No próximo tópico falaremos sobre expressões, que é um único artigo gigantesco na documentação. Se não souber o que é, eu vou tentar explicar na próxima, fechado?
Inté!