Na linguagem de programação PHP temos uma série de recomendações chamadas PSRs. Elas são definidas por um grupo de desenvolvedores em conjunto com a comunidade. Nesse post vamos falar de uma das PSRs, a PSR-4 que visa padronizar o modo como carregamos os arquivos na linguagem de programação PHP.
Caso não conheça o que é PHP-FIG, PSR, RFC e outros detalhes, aconselho leitura do artigo O que são as PSRs do PHP.
Porque criar uma padronização como a PSR-4 para autoload
Uma aplicação PHP por menor que seja precisa ser dividida em vários arquivos para manter a organização. Os arquivos consequentemente precisam ser incluídos para que o código dentro dele possa ser usado. Com esse intuito usamos o que chamamos em PHP de autoloading, que basicamente é uma lógica para carregar nossos arquivos automaticamente.
O problema é que cada projeto implementava uma lógica diferente para carregar os arquivos e também para estrutura de pastas onde esses arquivos eram colocados. E como já falamos no artigo sobre o que são PSRs, quando cada projeto ou empresa usa um padrão temos vários problemas. Além disso, nem sempre reinventar a roda é uma boa ideia quando falamos de programação, muitas vezes o modo como era feito não era o melhor.
Pensado em uma padronização única de carregamento o PHP-FIG criou a PSR-0 que com o tempo acabou sendo descontinuada e a PSR-4 passou a ser indicada em seu lugar.
Porque seguir a PSR-4
A PSR-4 vai de encontro ao desenvolvimento moderno de aplicações PHP e possui tudo que o desenvolvedor precisa para trabalhar com orientação a objetos. Ela foi pensada para funcionar com namespace e facilitar que o projeto atenda outras recomendações, como por exemplo a PSR-1.
O PSR-4 pode ser facilmente utilizado com autoload do composer, além de ser o padrão adotado pelos principais frameworks PHP do mercado, como:
Laravel
Symfony
Doctrine
Slim
Devido a maioria dos projetos atuais do mercado utilizarem PSR-4, quando um novo desenvolvedor entrar no projeto, provavelmente ele já conhecerá a recomendação e começará produzir mais rápido.
Namespace e estrutura de pastas na PSR-4
Se olharmos o namespace de uma classe e o caminho de um arquivo no sistema operacional vamos ver que eles são extremamente parecidos:
Por exemplo, no linux poderíamos ter o caminho de um arquivo assim: Treinaweb/Recursos/Curso.phpe no PHP um namespace igual abaixo:
<?php
namespace TreinawebRecursos;
class Curso
{
//...
}
A PSR-4 faz uso exatamente dessa característica em comum, desse modo precisamos definir o mínimo possível de lógica para carregar nossos arquivos, temos a vantagem da organização dos namespaces seguir o mesmo padrão que a dos arquivos, além de fazer uso da estrutura de diretórios do sistema operacional que é algo amplamente conhecido.
Recomendações para definição do namespace na PSR-4
Quando utilizamos a PSR-4 temos que seguir algumas recomendações na hora de definir o namespace em nossas classes. Ele deve seguir a estrutura abaixo:
<NomeNameSpace>(<SubNamespaceNames>)*<NomeClasse>
É necessário um namespace principal, que no exemplo acima é representado por <NomeNameSpace>. Ele também é conhecido por namespace do fornecedor (vendor namespace). Se estiver desenvolvendo um projeto que será compartilhado, por exemplo, uma biblioteca, é importante que o namespace principal seja unico;
Podemos ter quantos sub-namespaces forem necessários para organização da nossa aplicação, por exemplo: TreinawebRecursosAVACursosCursotem os sub-namespaces RecursosAVACursos
Sempre deve terminar com o nome de uma classe, no exemplo TreinawebRecursosAVACursosCurso, Curso é o nome da nossa classe;
Os caracteres do caminho do namespace podem ter letras maiúsculas e minúsculas;
O nome da classe sempre deve ser referenciado em case-sensitive, ou seja, respeitando letras maiúsculas e minúsculas
Veja o exemplo de um controller em uma aplicação Laravel:
namespace AppHttpControllers;
use IlluminateHttpRequest;
class UserController extends Controller
{
/**
* Store a new user.
*
* @param  Request  $request
* @return Response
*/public function store(Request $request)
{
$name = $request->input('name');
//
}
}
No caso do namespace IlluminateHttpRequestque o código acima importa, temos:
Illuminate– É o namespace principal (vendor namespace);
Http– Sub-namespace de organização interna da aplicação;
Request– Nome da classe
Recomendação para carregamento dos arquivos na PSR-4
O carregamento dos arquivos acontecem de acordo com a estrutura do namespace que definimos. Para ele acontecer deve seguir os seguintes detalhes:
O namespace principal (vendor namespace) deve indicar para o diretório de base;
Os sub-namespaces definidos representam os diretórios criados dentro do diretório base. Seguindo o mesmo padrão de letras maiúsculas e minúsculas definidas em cada sub-namespace;
O nome da classe no namespace deve seguir o mesmo padrão do nome do arquivo onde a classe está. O arquivo deve terminar com .php e seguir mesmo padrão de maiúsculas e minúsculas do nome da classe.
Como funciona a PSR-4
Vamos pegar o exemplo do namespace IlluminateHttpRequestnovamente. Se olharmos a estrutura de pastas do projeto veremos:
Vendor namespace Illuminateaponta para a pasta src/Illuminate/;
Sub-namespace Httpaponta para a pasta de mesmo nome;
Nome da Classe Requestaponta para o arquivo Request.php
Como usar a PSR-4 no meu projeto
O modo mais fácil de usar o padrão PSR-4 em um projeto PHP através do próprio gerenciador de dependência Composer. No arquivo composer.jsonconfiguramos o vendor namespace e a pasta principal a partir de onde serão criados os sub-namespaces:
"autoload": {
"psr-4": {
"Treinaweb\": "src/"
},
},
Então podemos criar uma classe conforme abaixo que ficaria dentro da pasta src/Recursoschamado Curso.php:
<?php
namespace TreinawebRecursos;
class Curso
{
//...
}
O composer possui dentro da pasta vendorum arquivo chamado autoload.phpbasta carregar ele e então todas as classes que instanciar automaticamente serão carregadas seguindo a lógica que aprendemos da PSR-4:
<?php
require_once "vendor/autoload.php";
$request = new TreinawebRecursosCurso();
Ao carregarmos o arquivo de autoload do composer automaticamente as classes das dependências instaladas no projeto também serão carregadas via autoload.
Também é possível implementar a lógica de carregamento da PSR-4 diretamente no seu projeto. No repositório oficial do PHP-FIG tem alguns exemplos de implementação da PSR-4.
Considerações finais sobre a PSR-4
A PSR-4 é o padrão mais utilizado da linguagem PHP. Ele vai de acordo com o desenvolvimento moderno PHP, é de amplo conhecimento da comunidade, além de ser facilmente usado com o composer o que permite iniciar o projeto sem ter que se preocupar em implementar autoload no projeto.
Fonte Elton Fonseca
Data da Publicação Original: 3 April 2020 | 2:35 pm
Equipe Charles Corrêa Soluções Web
Iniciamos nossas atividades em 2002, na criação de sites, lojas virtuais, site gerenciáveis, manutenção e campanhas digitais.
Desejamos proporcionar aos clientes um retorno que reflita em sua jornada de sucesso na internet com a divulgação de sua empresa ou negócio.
Atuando no mercado de desenvolvimento e criação de sites a Charles Corrêa – Soluções Web & SMS Marketing vem agregando as últimas tendências em tecnologia em design e programação, a equipe pensa sempre em transmitir a essência de sua empresa para que mais do que ser encontrada na internet ela possa realmente mostrar seus produtos e ou serviços de forma agradável e direta aos seus clientes em potencial.