Recentemente lancei um post Como usar Traits no PHP, com isso surgiu uma duvida nos comentários realizado pelo Paulo Dias, onde questionou como poderia utilizar a mesma implementação porem fazendo uso de namespace.
Neste post vou implementar o mesmo conceito do post anterior demonstrando o uso de namespace.
Para nossa implementação devemos criar o diretório com o nome ‘traits_com_namespace’, após sua criação devemos acessar a raiz do diretório pelo terminal e executar o seguinte comando:
|
|
Como observado acima, iremos utilizar o composer para que o mesmo faça o autoload do nosso projeto. Caso não conheça o composer recomendo a leitura do meu post Iniciando com composer.
Ao executar o comando, basta seguir o passo a passo solicitado pelo composer e gerar o arquivo composer.json.
Após a finalização, abra o arquivo composer.json e vamos incluir nossa regra para autoload, veja o trecho de código abaixo.
|
|
Devemos incluir o trecho de código no arquivo composer.json após a chave ‘minimum-stability’, como demonstrado abaixo.
|
|
Vamos detalhar o que configuramos de autoload:
- Estamos utilizando PSR-4 e definimos que nossa namespace iniciará com ‘DiegoBrocanelli’ e nosso código ficará dentro do diretório src.
Para que nosso autoload seja gerado devemos executar o seguinte comando pelo terminal:
|
|
Ao finalizar a geranção do autoload será criado o diretório vnedor e teremos o seguinte retorno no terminal.
|
|
Devemos agora criar nossa estrutura de código, uma boa pratica é separar nossos códigos com isso vamos criar um diretório App dentro de src.
Podemos agora criar a classe ShopCar.php dentro do diretório App e importar a implementação do post anterior, veja como ficou a implementação abaixo.
|
|
A implementação acima está 99.9% idêntica ao post anterior, porem, se repararmos na linha 3 foi definido a namespace, onde seguiu conforme configurações anteriores definindo a raiz DiegoBrocanelli seguido do diretório onde a classe encontra-se.
Vamos agora implementar nossa trait LogTrait.php dentro do diretório APP, veja abaixo a implementação.
|
|
Novamente o código acima está 99.9% idêntico ao do post original, porem, na linha 03 definimos a namespace da nossa trait. Que como encontra-se no mesmo diretório da classe ShopCar mantém-se o mesmo.
Por fim, devemos atualizar nossa classe ShopCar para consumir nossa trait, veja implementação abaixo:
|
|
Viram como foi simples! Como ambos os códigos encontram-se na mesma namespace, apenas utilizamos o comando ‘use’ para chamar nossa trait e assim termos o acesso ao método info().
Para validar nosso projeto vamos criar um arquivo index.php na raiz do projeto e implementar a chamada da classe ShopCar, veja resultado da implementação abaixo:
|
|
Podemos observar, logo no início do arquivo importamos o autoload do composer, para temos acesso as nossas classes.
Em seguida importamos a classe ShopCar, utilizando o comando ‘use’.
A partir deste momento podemos instanciar a classe ShopCar e acessar o método buy().
Abra o terminal e acesse a raiz do projeto e execute o seguinte comando:
|
|
Abra seu navegador e acesse a url:
|
|
Como resultado, devemos obter o mesmo resultado obtido no post anterior, veja abaixo o retorno esperado.
|
|
Com isso finalizamos nossa implementação. De forma simples e prática implementamos o mesmo conceito utilizando namespaces.
Foi uma implementação sem uso de framework, porem, o conceito de namespace é aplicado em todos os frameworks do ecossistema PHP.
Espero que este conteúdo tenha sanado a dúvida do nosso amigo Paulo Dias e todos que possam vir a utilizar e estão com dúvidas.
Caso você tenha alguma dúvida faça como o Paulo, deixe nos comentários, com isso podemos ir gerando cada vez mais conteúdo com um debate saudável, ficarei muito feliz em poder ajudar na medida do possível.
Grande abraço e até a próxima! 🙂