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.
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.