DEV Community

Cover image for Estilo de código no PHP: as recomendações da PSR-1 e PSR-12
Marcelo Chiaretto
Marcelo Chiaretto

Posted on

Estilo de código no PHP: as recomendações da PSR-1 e PSR-12

As PSRs, ou PHP Standards Recommendations, são uma série de especificações para o PHP elaboradas pela PHP-FIG (PHP Framework Interop Group), visando criar um padrão de código para os diferentes frameworks da linguagem, como autoloading, interfaces, requisições e respostas HTTP e estilo de códigos. Neste artigo falarei das PSR-1 e PSR-12, que tratam dos padrões de estilo de código.

PSR-1 - Basic Coding Standard

Como o próprio nome dessa PSR diz, ela aborda o padrão básico para escrever um código PHP.

O arquivo PHP

As tags que indicam que é um arquivo PHP devem ser somente <?php ?> e <?= ?> (em arquivos somente com código PHP o fechamento da tag ?> não deve ser realizado, conforme especificado na PSR-12).

Um arquivo PHP não deve misturar declarações de classes, funções constantes etc, com lógica externa a esses (side effects), como conectar a um serviço externo, alterar configurações, fazer require ou include de arquivos, ler e escrever arquivos etc. O exemplo abaixo mostra um código PHP misturando a declaração de classes com side effects, não recomendado:

<?php
// side effect: alteração de configuração ini do PHP
ini_set('error_reporting', E_ALL);

// side file: carregando um arquivo
include "file.php";

// side effect: gerando saída HTML
echo "<html>\n";

// declaração de função
function myFunction()
{
    // corpo da função
}
Enter fullscreen mode Exit fullscreen mode

Nomes de classes e namespaces

O namespace deve seguir o padrão determinado na PSR-4 e os nomes de classes devem seguir o padrão StudlyCaps (também conhecido como PascalCase, UpperCamelCase):

<?php
namespace Project\Model;

class MyClass
{
    // corpo da classe
}
Enter fullscreen mode Exit fullscreen mode

Propriedades, métodos e constantes de classes

As constantes de classes devem seguir o padrão SCREAMING_SNAKE_CASE:

<?php
namespace Project\Model;

class MyClass
{
    const DATE_APPROVED = '2022-04-03';
}
Enter fullscreen mode Exit fullscreen mode

A PSR-1 não define que o nome da propriedade seja no estilo StudlyCaps, camelCase or $under_score, ela apenas reforça que um único estilo seja usado em todo o escopo do projeto. Por convenção, o mais adotado é o camelCase: private string $firstName.

Já os nomes dos métodos devem seguir o estilo camelCase: private function myFunction().

PSR-12: Extended Coding Style

A PSR-12 é uma recomendação bem mais longa, estendendo a PSR-1 e substituindo a PSR-2. Falarei aqui sobre como essa PSR trata do tamanho de linhas, indentação, estrutura de uma classe, palavras-chave e estruturas de controle.

Linhas, indentação, palavras-chave e tipos

O comprimento recomendado de uma linha é de 80 caracteres. Declarações que extrapolam esse comprimento deve ser quebradas em mais linhas. Não deve haver espaços em branco no final de cada linha e é permitido inserir quebras de linha para facilitar a leitura do código, salvo em casos que isso é proibido. A indentação deve ser realizada com 4 espaços em cada nível.

A escrita de palavras-chave e tipos deve ser em lower case e usar a forma curta quando disponível: int, bool, false, echo etc.

Estrutura de uma classe

Basicamente, a estrutura de uma classe deve ser: abertura da tag do PHP, declaração do namespace, importações com use e o corpo da classe.
Na escrita de uma classe o uso de extends e implements deve ser realizado na mesma linha do nome da classe. A abertura da chaves deve ser realizada após a linha do nome da classe e fechada após o corpo da classe.

A visibilidade de uma propriedade, constante ou método deve ser explicitamente declarada. A abertura e fechamento de chaves dos métodos segue o mesmo padrão para as classes. Quando um método tem parâmetros sempre deve haver um espaço em branco após a vírgula e um parâmetro com valor padrão deve ser sempre colocado por último.

<?php

namespace Vendor\Package;

use FooClass;

class MyClass extends ParentClass implements \ArrayAccess
{
    private int $myNumber;
    private string $myName;

    public function myFunction(int $number, string $name = ''): void
    {
        $this->myNumber = $number;
        $this->myName = $name;
    }
}
Enter fullscreen mode Exit fullscreen mode

Estruturas de controle

As recomendações gerais para todas as estruturas de controle são:

  • entre o nome da estrutura de controle e a abertura do parênteses da estrutura deve haver um espaço em branco
  • não deve ter espaço em branco após o fechamento do parênteses
  • entre o fechamento do parênteses e a abertura da chave da estrutura de controle deve haver um espaço em branco
  • o corpo da estrutura deve ser delimitado por chaves e a abertura da chave deve ser realizada na mesma linha da declaração da estrutura
  • o corpo da estrutura deve ser iniciado na próxima linha após a abertura da chave e deve ser recuado uma vez

Exemplo com if:

<?php

if ($variable) {
    // código
} else {
    // código
}
Enter fullscreen mode Exit fullscreen mode

Para o restante das recomendações da PSR-12 acesse a documentação.

Top comments (2)

Collapse
 
santanaluc94 profile image
Lucas Teixeira dos Santos Santana

Parabéns pela postagem mano!!! Acho essencial esse tipo de conteúdo em português.

Collapse
 
marcelochia profile image
Marcelo Chiaretto

Valeu pela força!