Como usar Traits no PHP com namespace

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 🙂

 

Diego Brocanelli

 

2 thoughts on “Como usar Traits no PHP com namespace

    1. Olá, Paulo Dias.

      Imagina sou nada, apenas tento auxiliar conforme posso.

      Fico feliz que o conteúdo lhe tenha sido útil, força nos estudos e sucesso nos projetos.

      Abraços 🙂

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *