Article image

RV

Ricardo Vicente12/07/2024 20:19
Compartilhe

Explorando as PSRs 1, 4 e 12: como elas impactam seu código PHP

  • #PHP

O que são as PSRs

As PSRs (PHP Standards Recommendations) são um conjunto de recomendações criadas pela comunidade PHP para padronizar práticas de desenvolvimento e melhorar a interoperabilidade entre projetos. Elas são mantidas pela PHP-FIG (PHP Framework Interoperability Group) e são amplamente adotadas na comunidade PHP.

image

A PSR-1 estabelece regras básicas de codificação que visam promover a legibilidade do código. Inclui diretrizes como o uso de tags PHP `<?php` ou `<?=`, a formatação correta de arquivos PHP (UTF-8 sem BOM), e o fim do arquivo sem linhas em branco desnecessárias.

A PSR-1, também conhecida como Basic Coding Standard, estabelece diretrizes fundamentais para o código PHP visando melhorar a legibilidade e a interoperabilidade entre projetos. Aqui está um resumo das regras principais:

1. Tags PHP: Arquivos PHP devem utilizar apenas `<?php` para abrir tags PHP e `<?= ` para impressão de conteúdo.

2. Codificação: Todos os arquivos PHP devem ser codificados em UTF-8 sem BOM (Byte Order Mark).

3. Espaços em branco: Os arquivos PHP não devem conter linhas em branco ou espaços no início ou final do arquivo, afim de evitar problemas de cabeçalho.

Abaixo está um exemplo de código PHP que segue as regras da PSR-1:

<?php

namespace MeuNamespace;

class MinhaClasse {
  public function __construct() {
      echo "Exemplo de classe seguindo PSR-1.";
  }

  public function meuMetodo() {
      return "Este método segue as diretrizes.";
  }
}

$instancia = new MinhaClasse();
echo $instancia->meuMetodo();

Neste exemplo:

- Utilizamos <?php para abrir tags PHP, conforme a PSR-1.

- A classe MinhaClasse está definida dentro do namespace MeuNamespace, seguindo boas práticas de organização.

- O arquivo está codificado em UTF-8 sem BOM, como recomendado.

- Não há linhas em branco antes ou depois do código PHP, respeitando as diretrizes da PSR-1.

image

A PSR-4 define um padrão para o carregamento automático de classes baseado no conceito de namespaces. Isso permite que as classes sejam organizadas em uma estrutura de diretórios que corresponde aos seus namespaces, facilitando a localização e inclusão automática dos arquivos de classes durante a execução do código.

A PSR-4, intitulada "Autoloading Standard", define um padrão para o carregamento automático de classes PHP baseado em namespaces. Aqui estão as principais regras resumidas:

1. Namespace e Estrutura de Diretórios: Cada namespace deve corresponder a uma estrutura de diretórios específica, facilitando a localização dos arquivos de classes.

2. Namespace Raiz: O namespace raiz (namespace de nível superior) corresponde ao diretório base de onde começa a estrutura de diretórios para namespaces.

3. Nome de Classe e Nome de Arquivo: O nome completo da classe (incluindo namespace) deve ter um mapeamento direto para o caminho do arquivo que contém a definição da classe.

4. Namespace e Subnamespace: Subnamespaces dentro do namespace raiz correspondem a subdiretórios dentro do diretório do namespace raiz.

5. Mapeamento Automático: O carregamento automático de classes deve mapear automaticamente o namespace e o nome da classe para o caminho do arquivo correspondente.

Estas regras da PSR-4 são projetadas para simplificar o carregamento de classes em aplicações PHP, promovendo uma estrutura de diretórios organizada e consistente baseada em namespaces.

Abaixo está um exemplo de estrutura de diretórios e classes PHP que segue as regras da PSR-4:

Estrutura de diretórios:

meu-projeto/
├── src/
│   └── MeuNamespace/
│       └── MinhaClasse.php
└── index.php

Conteúdo do arquivo MinhaClasse.php:

<?php

namespace MeuNamespace;

class MinhaClasse {
  public function __construct() {
      echo "Exemplo de classe seguindo PSR-4.";
  }

  public function meuMetodo() {
      return "Este método segue as diretrizes.";
  }
}

Conteúdo do arquivo index.php (onde a classe será utilizada):

<?php

// Carregamento automático de classes usando PSR-4
spl_autoload_register(function ($class) {
  // Namespace raiz do projeto
  $prefix = 'MeuNamespace\\';

  // Diretório base onde estão as classes
  $base_dir = __DIR__ . '/src/';

  // Verifica se a classe usa o prefixo do namespace raiz
  $len = strlen($prefix);
  if (strncmp($prefix, $class, $len) !== 0) {
      return;
  }

  // Obtém o nome relativo da classe
  $relative_class = substr($class, $len);

  // Monta o caminho do arquivo da classe
  $file = $base_dir . str_replace('\\', '/', $relative_class) . '.php';

  // Inclui o arquivo da classe se existir
  if (file_exists($file)) {
      require $file;
  }
});

// Criando uma instância da classe MinhaClasse
$instancia = new MeuNamespace\MinhaClasse();
echo $instancia->meuMetodo();

Neste exemplo:

- A classe MinhaClasse está definida no namespace MeuNamespace, que corresponde ao diretório src/MeuNamespace/.

- O arquivo MinhaClasse.php contém a definição da classe MinhaClasse.

- O arquivo index.php utiliza o carregamento automático de classes (autoload) para incluir automaticamente as classes conforme necessário, seguindo as diretrizes da PSR-4.

- O namespace raiz (MeuNamespace) corresponde ao diretório base src/ do projeto.

- Quando uma instância de MinhaClasse é criada, o método meuMetodo() é chamado, demonstrando o uso correto do mapeamento de namespace para estrutura de diretórios conforme definido pela PSR-4.

image

A PSR-12 é um guia mais abrangente de codificação que se baseia na PSR-1 e expande as diretrizes para abranger aspectos mais detalhados da formatação de código. Isso inclui regras para a indentação de código (usando 4 espaços por nível de indentação), o uso consistente de chaves em estruturas de controle, e a quebra de linhas em lugares apropriados para melhorar a legibilidade.

A PSR-12, intitulada "Extended Coding Style Guide", define diretrizes detalhadas para a formatação e estilo de código PHP. Aqui estão as principais regras resumidas:

1. Indentação: Utilize 4 espaços por nível de indentação, não use tabulações para indentação.

2. Chaves de Abertura e Fechamento: Chaves de abertura devem estar na mesma linha que a estrutura de controle (if, for, while, etc.) e as chaves de fechamento devem estar em uma nova linha após o bloco de código.

3. Linhas Vazias: Use linhas vazias para separar logicamente blocos de código relacionados dentro de métodos e funções.

4. Comentários: Utilize comentários no estilo do PHPDoc para documentar classes, métodos e propriedades.

5. Declarações if, else, elseif: Sempre utilize chaves, mesmo quando o corpo contém apenas uma única linha.

6. Declarações namespace e use: Deixe uma linha em branco após a declaração do namespace e agrupe as declarações `use` (por exemplo, agrupando as declarações `use` do PHP 7.0+ e as anteriores).

7. Declarações de Propriedades: Sempre declare as propriedades explicitamente como `public`, `protected`, ou `private`.

8. Constantes: Utilize letras maiúsculas separadas por underscore (_) para nomes de constantes.

9. Palavras-chave e Operadores: Sempre use true, false, null, self e parent em minúsculas.

10. Uso de final: Marque classes e métodos como final quando não pretendem ser extendidos ou sobrescritos.

Essas regras da PSR-12 visam melhorar a legibilidade, consistência e manutenção do código PHP, promovendo práticas de codificação claras e padronizadas na comunidade.

Aqui está um exemplo de código PHP que segue as regras da PSR-12:

<?php

namespace MeuNamespace;

/**
 * Exemplo de classe seguindo PSR-12.
 */
class MinhaClasse
{
  const MINHA_CONSTANTE = 'Valor';

  private $propriedade;

  /**
   * Construtor da classe.
   */
  public function __construct($propriedade)
  {
      $this->propriedade = $propriedade;
  }

  /**
   * Retorna a propriedade.
   *
   * @return mixed A propriedade da classe.
   */
  public function getPropriedade()
  {
      return $this->propriedade;
  }

  /**
   * Exemplo de método com estrutura de controle.
   */
  public function exemploMetodo($condicao)
  {
      if ($condicao) {
          return 'Condição verdadeira.';
      } else {
          return 'Condição falsa.';
      }
  }
}

// Exemplo de uso da classe seguindo as regras da PSR-12
$instancia = new MeuNamespace\MinhaClasse('Exemplo');
echo $instancia->getPropriedade() . "\n";
echo $instancia->exemploMetodo(true) . "\n";

Neste exemplo:

- A classe MinhaClasse está definida no namespace MeuNamespace, seguindo as boas práticas de organização de código.

- A constante MINHA_CONSTANTE é declarada em letras maiúsculas com underscore, conforme a PSR-12.

- As propriedades e métodos são nomeados de acordo com as convenções de camelCase.

- A indentação é feita com 4 espaços por nível, como recomendado pela PSR-12.

- As chaves de abertura estão na mesma linha que a estrutura de controle (if, else) e as chaves de fechamento estão em novas linhas.

- Utilização de comentários no estilo do PHPDoc para documentar a classe e seus métodos.

- Uso de linhas em branco para separar logicamente blocos de código dentro dos métodos.

Conclusão

Adotar as PSRs 1, 4 e 12 no desenvolvimento PHP não apenas promove a consistência e a legibilidade do código, mas também melhora significativamente a colaboração e a manutenção de projetos. A PSR-1 estabelece diretrizes básicas que garantem um formato uniforme e apropriado para arquivos PHP, enquanto a PSR-4 simplifica o carregamento automático de classes através de uma estrutura de diretórios baseada em namespaces. Por fim, a PSR-12 amplia essas diretrizes, proporcionando um guia detalhado para a formatação de código, incluindo aspectos como indentação, uso de chaves e comentários, o que resulta em um código mais claro, consistente e fácil de entender para desenvolvedores de todos os níveis. Ao adotar essas recomendações, os desenvolvedores não apenas seguem as melhores práticas da comunidade PHP, mas também contribuem para a construção de um ecossistema PHP mais robusto e interoperável.

Quer melhorar seu código PHP? Conheça as PSRs! Essas recomendações são essenciais para escrever código mais legível e padronizado. Não fique para trás, adote as PSRs hoje mesmo!

#PHP #Desenvolvimento #PadrõesDeCódigo

Ilustrações geradas por: humano via Photopea

Conteúdo gerado por: ChatGPT e revisões humanas

Compartilhe
Comentários (0)