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
{
}
Agora veremos um exemplo que DEVERIA a ser seguido:
<?php
//Declarando uma classe
class Usuario
{
private $nome;
public function setNome($nome)
{
$this->nome = $nome;
}
}
- 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
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
{
}
- 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';
- 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()
{
}
Exemplo com a maneira errada:
<?php
//Declaração em snake_case
public function get_nome_usuario()
{
}
//Declaração em StudlyCaps
public function GetNomeUsuario()
{
}