PHP PSRs : PSR-1(Basic Coding Standard)

Antonio Silva - Oct 5 '23 - - Dev Community

O que são as PSRs do PHP ?

A PHP Standard Recommendation (PSR) é uma especificação PHP publicada pelo PHP Framework Interop Group, serve para a padronização de conceitos de programação em PHP.

É importante conhecer que o PHP-FIG define algumas palavras-chaves dentro das PSRs que servem como uma identificação no projeto. São elas:

  • MUST - DEVE
  • MUST NOT - NÃO DEVE
  • REQUIRED - OBRIGATÓRIO
  • SHALL - TEM QUE
  • SHALL NOT - NÃO TEM QUE
  • SHOULD - DEVERIA
  • SHOULD NOT - NÃO DEVERIA
  • RECOMMENDED - RECOMENDADO
  • MAY - PODE
  • OPTIONAL - OPCIONAL

PSR-1

Essa PSR tem como objetivo definir alguns elementos padrões
de codificação que devem garantir um maior nível de
interoperabilidade entre os códigos PHP.

O QUE É INTEROPERABILIDADE ?
Interoperabilidade é a capacidade de um sistema ou aplicação
comunicar-se com outros sistemas ou aplicações de maneira
eficiente, alcançando um maior nível de integridade dos
dados.

Garantir que a sua aplicação seja interoperável traz consigo
uma maior integridade dos dados, e além disso, a sua aplicação torna-se mais eficiente quando precisar se comunicar com outras aplicações.

Portanto, se a aplicação for interoperável, você não deverá ter dor de cabeça no momento em que precisar realizar a
comunicação com outros sistemas.

Regras

  • Regra 1:

Arquivos PHP DEVEM usar apenas as tags <?php e <?=. Em muitos servidores, as short open tags estão desabilitadas por padrão e isso pode ocasionar muita dor de cabeça, então por convenção utilize somente as tags <?php ou <?=.

  • Regra 2:

Arquivos PHP DEVEM usar apenas UTF-8 sem BOM (Byte Order Mark). As maiorias das IDEs já vem configurada para o padrão UTF-8 sem BOM.

  • Regra 3:

Arquivos PHP DEVERIAM declarar (classes, métodos, constantes, atributos etc.) ou causar efeitos colaterais (gerar outputs, realizar modificações no php.ini etc.), mas NÃO DEVERIAM fazer as duas coisas.

Se seu arquivo for de declaração de uma classe ou interface,
então respeite. Faça apenas isso, nada de exibir conteúdo ou alterar configurações do php.ini antes da declaração da classe ou após a declaração.

Exemplo do que DEVE ser evitado:

<?php
    //Alterando a configuração do php.ini
    ini_set('error_reporting', E_ALL);

    //Incluindo um arquivo externo
    include "arquivo.php";

    //Gerando uma saída na tela
    echo "<html>\n";

    //Declarando uma classe
    class Usuario
    {
    }
Enter fullscreen mode Exit fullscreen mode

Agora veremos um exemplo que DEVERIA a ser seguido:

<?php
    //Declarando uma classe
    class Usuario
    {

      private $nome;

      public function setNome($nome)
      {
        $this->nome = $nome;
      }
    }
Enter fullscreen mode Exit fullscreen mode
  • Regra 4:

Namespaces e classes DEVEM seguir o padrão descrito na
PSR-0 (depreciada) e PSR-4 (substituta da PSR-0). Para que se
obtenha um autoloading compreensível e eficaz é necessário
seguir a mesma estrutura de diretórios no namespace na
declaração dos arquivos.

O QUE É AUTOLOADING ?
É a maneira de realizar o carregamento automático de arquivos como classes, interfaces, traits etc., sem que haja a necessidade de o desenvolvedor vincular esses arquivos explicitamente no código.

O autoloading de arquivos é considerado compreensível e
eficaz quando realizado da maneira correta, ou seja, da maneira que é estipulada por esta PSR.

Para entendermos melhor, vamos a um exemplo:

|-src
 |-App
  |-Controller
   |-HomeController.php
Enter fullscreen mode Exit fullscreen mode

Note que temos uma estrutura de diretórios bem simples. Com
a utilização de namespace, o exemplo ficaria conforme a seguir:

<?php

    namespace App\Controller;

    class HomeController
    {
    }
Enter fullscreen mode Exit fullscreen mode
  • Regra 5:

O nome de arquivos como classes, interfaces e traits DEVEM seguir o padrão StudlyCaps. Isso significa que a primeira letra de cada palavra deve ser escrita com letra maiúscula, como é o caso do nosso exemplo HomeController .

  • Regra 6:

Constantes DEVEM ser declaradas com todas as letras em maiúsculo e separadas por underscores (_). Nada de declarar uma constante com letras em minúsculo, ou camelCase, ou snake_case. O único modo permitido é a utilização de todas as letras em maiúsculo.

<?php
    const LOG_CRITICAL = 'critical';
Enter fullscreen mode Exit fullscreen mode
  • Regra 7:

As propriedades definidas DEVERÃO ser aplicadas de forma consistente dentro de um escopo razoável, podendo ser em nível de pacote, em nível de fornecedor, de classe ou de método.

Não importa a convenção de nomenclatura utilizada (StudlyCaps, camelCase, snake_case) desde que respeitadas as regras anteriormente descritas.

  • Regra 8:

O nome dos métodos DEVE ser declarado na convenção de nomenclatura camelCase.

Exemplo com a maneira correta:

<?php

    public function getNomeUsuaio()
    {
    }
Enter fullscreen mode Exit fullscreen mode

Exemplo com a maneira errada:

<?php

    //Declaração em snake_case
    public function get_nome_usuario()
    {
    }

    //Declaração em StudlyCaps
    public function GetNomeUsuario()
    {
    }
Enter fullscreen mode Exit fullscreen mode
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .