Posts da Tag: PSR-1 - Blog da TreinaWeb

PHP

PSR-1 Conheça os padrões básicos de codificação do PHP

Neste artigo falaremos sobre a PSR-1 e a importância dela para o PHP. Ela foi uma das primeiras aceitas pelo PHP-FIG e fala sobre padrões básicos de codificação.

No artigo anterior falamos sobre o que é PSR, PHP-FIG e outros conceitos importantes para o pleno entendimento deste artigo. Aconselho dar uma olhadinha aqui: O que é PSR no PHP

Arquivos

As PSRs são divididas por tópicos. O primeiro tópico da PSR-1 fala sobre recomendações que devemos usar nos arquivos php da nossa aplicação.

Tags

Devemos usar somente as tags de abertura de código PHP <?php e <?=.

Essa recomendação existe, porque até a versão 7 o PHP permitia o uso de outras tags como <%, <%= e <script language=”php”>.

Charset Encode

Devemos configurar no editor o charset UFT-8 sem BOM.

No Visual Studio Code essa configuração já é definida por padrão:

Efeito Colateral

Recomendado que um arquivo contenha apenas declarações (classes, constantes, funções e outros) ou cause algum efeito colateral (saída com echo, includes, modificação de configurações, emissão de erros e outros), mas não é recomendado ambos em um único arquivo.

Um exemplo de arquivo apenas com declarações:

<?php

// declaração
function somar()
{
    // corpo da função
}

// declaração
function subtrair()
{
    // corpo da função
}

Um exemplo de arquivo apenas uma lógica que causa efeito:

<?php

// causa efeito colateral
ini_set('error_reporting', E_ALL);

// causa efeito colateral
include "file.php";

// causa efeito colateral
echo "<html>\n";

Agora um exemplo não recomendado misturando declarações com efeitos colaterais no mesmo arquivo:

<?php

// causa efeito colateral
ini_set('error_reporting', E_ALL);

// causa efeito colateral
include "file.php";

// causa efeito colateral
echo "<html>\n";

// faz uma declaração
function somar()
{
    // corpo da função
}

Namespace e nome de classe

Namespaces e classes devem seguir uma PSR de autoload.

Cada classe deve estar em um arquivo próprio e possuir ao menos um nível de namespace. O primeiro nível do namespace deve ser o nome do fornecedor, que pode ser o nome do projeto ou do desenvolvedor.

Classes devem ser declaradas usando StudlyCaps ou também conhecido como PascalCase. Padrão onde a letra inicial de cada palavra deve ser maiúscula.

A partir da versão 5.3 do PHP é obrigatório o uso de namespace.

<?php

namespace Fornecedor\Model;

class Produto
{
}

Em versões anteriores a 5.3 usávamos a identificação completa no nome da classe, por exemplo, Fornecedor_Model_Produto. A versão 5.3 foi lançada em 2009, então dificilmente encontramos projetos ainda com esse padrão de nome de classes e sem uso de namespace.

Constantes de classes, propriedades e métodos

Na PSR-1 ao se referir a classe também consideramos classes, interfaces e traits.

Constantes em classes

As constantes declaradas dentro de uma classe devem ter o nome em maiúsculo e separado por underlines:

<?php

namespace Fornecedor\Model;

class Produto
{
    const EMPRESA = 'Treinaweb';
    const TIPO_PRODUTO = 'Curso';
}

Propriedades

A PSR-1 não indica qual padrão deve ser utilizado no nome das propriedades. Ela apenas recomenda que o padrão escolhido no projeto seja seguido em todos os locais por uma questão de consistência

Na prática a maioria dos projetos hoje utiliza o padrão $camelCase com o nome da primeira palavra em minúsculo e das demais em maiúsculo. Veja por exemplo algumas propriedades da classe Request do Laravel Framework:

/**
* The decoded JSON content for the request.
*
* @var \Symfony\Component\HttpFoundation\ParameterBag|null
*/
protected $json;

/**
* All of the converted files for the request.
*
* @var array
*/
protected $convertedFiles;

/**
* The user resolver callback.
*
* @var \Closure
*/
protected $userResolver;

/**
* The route resolver callback.
*
* @var \Closure
*/
protected $routeResolver;

Nomes de métodos

Nomes de métodos devem sempre serem declarados camelCase. Isso é um dos motivos para o uso desse padrão também em nome de propriedades na maioria dos projetos, conforme vimos no tópico anterior.

Considerações finais

A PSR-1 possui recomendações que parecem até bobas a primeira vista, pois hoje a maioria dos desenvolvedores PHP já seguem ela mesmo sem saber, porém ela é de grande importância. Além de definir elementos básicos do código PHP ela também é usada como requisito para PSR-12, se seu código não segue a PSR-1 não terá como seguir a PSR-12.

Inclusive vamos falar sobre a PSR-12 em nosso próximo post. Fique ligado em nosso blog e também nas redes sociais.


PHP

O que são as PSRs do PHP

A linguagem de programação PHP, assim como outras linguagens, permite que os desenvolvedores escrevam código de diversas maneiras possíveis. Essa característica é até interessante, pois garante mais liberdade para os desenvolvedores, porém isso também pode ser um problema.

A diferença no modo como os desenvolvedores escrevem código pode gerar uma verdadeira salada de frutas dependendo do tamanho da equipe e quantas pessoas já passaram no projeto ao longo do tempo.

Baseado nisso muitas linguagens e tecnologias definem recomendação de padrões. No PHP essas recomendações são criadas por um grupo chamado PHP-FIG e são chamadas de PSR.

WordPress - Criação de Plugins
Curso de WordPress - Criação de Plugins
CONHEÇA O CURSO

PHP-FIG

PHP Framework Interop Group (PHP-FIG) é um grupo formado por desenvolvedores da comunidade PHP em 2009. O objetivo inicial do grupo era definir recomendações que fossem aplicadas aos Frameworks PHP participantes e facilitasse a interoperabilidade entre os frameworks que cresciam rapidamente.

Ao passar do tempo o grupo começou a perceber que as recomendações poderiam ser úteis em outros tipos de aplicações, não somente em frameworks, já que a linguagem PHP possui grandes CMSs como WordPress, Magento, Drupal, Joomla e diversos outros. Com isso o grupo ganhou membros também de outros tipos de projetos, não somente Frameworks.

As recomendações precisam ser votadas e aprovada pelos membros do PHP-FIG para que possam ter validade. Somente membros podem votar, porém qualquer desenvolvedor da comunidade que queira participar das discussões pode, basta entrar nos canais de contato do PHP-FIG.

PSR

As recomendações criadas pelo PHP-FIG são agrupadas em PHP Standard Recommendation (PSR). Uma PSR basicamente possui recomendações sobre um tema específico, como por exemplo, a PSR-12 que fala sobre padronização de sintaxe de código.

Cada PSR é identificada por um número e possui um status. O status nos ajuda a saber se devemos ou não seguir as recomendações daquela PSR:

  • Rascunho – enquanto uma PSR está em discussão e construção ela é definida como rascunho;
  • Aceito – quando uma PSR é votada e aprovada o status dela passa para aceita;
  • Descontinuada – se por algum motivo depois de aceita aquela PSR não é mais relevante ela é descontinuada;
  • Abandonada – quando o rascunho de uma PSR não é aceito, ela passa para o estado abandonada e é mantida por questão de documentação.

Existem PSRs que tratam de diversos temas como: estilo de código, autoload, cache, log, HTTP e outros. É possível ver a lista de PSRs e seus estados no site do PHP-FIG.

RFC

Assim como o PHP-FIG se propôs a discutir recomendação de padrões para a linguagem PHP, existem outros grupos que definem recomendações para diversos tipos de processos que acontece na internet. Esses grupos criam documentos técnicos chamados de Request For Comments (RFC), em português requisição para comentários. As RFCs possuem um funcionamento muito parecido com as PSRs, inclusive o processo de criação das PSRs é inspirado no processo de criação das RFCs.

As PSRs usam RFCs dentro de suas recomendações. Elas são usadas tanto como base para padronização de alguma recomendação, quanto para orientar o requerimento de uma recomendação.

Nível de requerimento

A RFC mais importante para conseguirmos interpretar corretamente as recomendações das PSRs é a RFC 2119. Ela padroniza os níveis de requerimento de uma determinada recomendação.

Podemos dividir os níveis de requerimentos em:

  • Deve – representado pelas palavras (MUST, REQUIRED e SHALL)
  • Não deve – representado pelas palavras (MUST NOT e SHALL NOT)
  • Recomendado – representado pelas palavras (SHOULD e RECOMMENDED)
  • Não recomendado – representado pelas palavras (SHOULD NOT e NOT RECOMMENDED)
  • Opcional – representado pelas palavras (MAY e OPTIONAL)

Vamos pegar um exemplo prático para entender o nível de requerimento. A PSR-1 que fala sobre padrão básico de codificação tem a seguinte recomendação:

Files MUST use only <?php and <?= tags.

Em português ficaria: arquivos DEVEM usar somente as tags &lt;?php e &lt;?=.

O nível de requerimento é representado por uma das palavras listadas na RFC2119, ele nos ajuda a entender quando devemos ou não seguir uma recomendação dentro de uma PSR. No exemplo acima nós DEVEMOS usar somente essas duas tags se quisermos dizer que nosso código segue a PSR-1.

PSR-1 e PSR-12

As duas primeiras PSRs que aconselho estudar são: a PSR-1 e a PSR-12. A primeira fala sobre padronização básica do nosso código e a segunda fala sobre o estilo como o código é escrito. A PSR-12 substituiu e estendeu a PSR-2, que precisou ser revisada devido a avanços na linguagem de programação PHP.

Nos próximos artigos vamos falar sobre essas duas importantes PSRs. Fique atento em nosso blog e redes sociais.

Formação:
CONHEÇA A FORMAÇÃO