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.

Deixe seu comentário

Professor e desenvolvedor. Formado em análise e desenvolvimento de sistema, pós graduando em engenharia e arquitetura de software. É autor de cursos em diversos temas, como, desenvolvimento back-end, cloud computing e CMSs. Nas horas vagas adora estudar sobre o mercado financeiro, cozinhar e brincar com pequeno Daniel. @eltonfonsecadev