PHP

Dominando PHP_CodeSniffer e PHPStan: Qualidade Estática de Código em Projetos Reais

7 min de leitura

Dominando PHP_CodeSniffer e PHPStan: Qualidade Estática de Código em Projetos Reais

PHPCodeSniffer: Implementando Padrões de Código PHPCodeSniffer (PHPCS) é uma ferramenta que detecta violações de padrões de código definidos. Ele analisa seu código estático, sem executá-lo, e identifica inconsistências em formatação, convenções de nomenclatura e aderência a standards como PSR-12. Funciona instalando-se via Composer e configurando regras que seu projeto deve seguir. A instalação é simples: . Após isso, você acessa o executável em . O PHPCS varre seus arquivos e relata problemas encontrados. Por exemplo, um arquivo com indentação errada ou variável mal nomeada será sinalizado. Você também pode usar (PHP Code Beauty and Fix) para corrigir automaticamente muitos erros. Configuração Básica e Uso Crie um arquivo na raiz do projeto para definir o comportamento padrão: Agora execute para analisar o código. Para correção automática: . Exemplo prático: PHPStan: Análise de Tipos e Lógica PHPStan é uma ferramenta de análise estática que detecta erros sem executar o código, com foco em type-checking e bugs lógicos. Diferente do PHPCS que verifica

<h2>PHP_CodeSniffer: Implementando Padrões de Código</h2>

<p>PHP_CodeSniffer (PHPCS) é uma ferramenta que detecta violações de padrões de código definidos. Ele analisa seu código estático, sem executá-lo, e identifica inconsistências em formatação, convenções de nomenclatura e aderência a standards como PSR-12. Funciona instalando-se via Composer e configurando regras que seu projeto deve seguir.</p>

<p>A instalação é simples: <code>composer require --dev squizlabs/php_codesniffer</code>. Após isso, você acessa o executável em <code>vendor/bin/phpcs</code>. O PHPCS varre seus arquivos e relata problemas encontrados. Por exemplo, um arquivo com indentação errada ou variável mal nomeada será sinalizado. Você também pode usar <code>phpcbf</code> (PHP Code Beauty and Fix) para corrigir automaticamente muitos erros.</p>

<h3>Configuração Básica e Uso</h3>

<p>Crie um arquivo <code>phpcs.xml.dist</code> na raiz do projeto para definir o comportamento padrão:</p>

<pre><code class="language-xml">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;

&lt;ruleset name=&quot;Meu Padrão&quot;&gt;

&lt;description&gt;Padrão de código para o projeto&lt;/description&gt;

&lt;arg name=&quot;basepath&quot; value=&quot;.&quot;/&gt;

&lt;arg name=&quot;colors&quot;/&gt;

&lt;arg name=&quot;parallel&quot; value=&quot;8&quot;/&gt;

&lt;file&gt;src&lt;/file&gt;

&lt;file&gt;tests&lt;/file&gt;

&lt;exclude-pattern&gt;/migrations/&lt;/exclude-pattern&gt;

&lt;exclude-pattern&gt;/vendor/&lt;/exclude-pattern&gt;

&lt;rule ref=&quot;PSR12&quot;&gt;

&lt;exclude name=&quot;Generic.WhiteSpace.DisallowTabIndent&quot;/&gt;

&lt;/rule&gt;

&lt;/ruleset&gt;</code></pre>

<p>Agora execute <code>vendor/bin/phpcs</code> para analisar o código. Para correção automática: <code>vendor/bin/phpcbf</code>. Exemplo prático:</p>

<pre><code class="language-php"></code></pre>

<h2>PHPStan: Análise de Tipos e Lógica</h2>

<p>PHPStan é uma ferramenta de análise estática que detecta erros sem executar o código, com foco em type-checking e bugs lógicos. Diferente do PHPCS que verifica formatação, PHPStan encontra erros reais: chamadas a métodos inexistentes, tipos incompatíveis, acesso a propriedades indefinidas. Funciona em múltiplos níveis (0 a 9), onde 0 é básico e 9 é rigoroso.</p>

<p>Instale com <code>composer require --dev phpstan/phpstan</code>. A configuração padrão já funciona, mas crie <code>phpstan.neon</code> para customização:</p>

<pre><code class="language-neon">parameters:

level: 7

paths:

  • src

excludePaths:

  • tests/fixtures

ignoreErrors:

  • &#039;#Access to undefined property#&#039;</code></pre>

<p>Execute com <code>vendor/bin/phpstan analyse src</code>. PHPStan detectará erros de tipo, propriedades indefinidas e lógica suspeita.</p>

<h3>Exemplo Prático de Detecção</h3>

<pre><code class="language-php"></code></pre>

<p>PHPStan também valida docblocks e tipos de retorno. Se você declara que um método retorna <code>string</code> mas retorna <code>null</code> em algumas condições, PHPStan aviará. Isso evita surpresas em produção.</p>

<h2>Integração com CI/CD e Automação</h2>

<p>Para máxima eficiência, integre ambas as ferramentas no seu pipeline. Configure um arquivo <code>composer.json</code> com scripts de qualidade:</p>

<pre><code class="language-json">{

&quot;scripts&quot;: {

&quot;check-quality&quot;: [

&quot;@check-style&quot;,

&quot;@check-types&quot;

],

&quot;check-style&quot;: &quot;phpcs&quot;,

&quot;fix-style&quot;: &quot;phpcbf&quot;,

&quot;check-types&quot;: &quot;phpstan analyse&quot;

}

}</code></pre>

<p>Agora execute <code>composer check-quality</code> localmente antes de fazer push. Para GitHub Actions, crie <code>.github/workflows/quality.yml</code>:</p>

<pre><code class="language-yaml">name: Code Quality

on: [push, pull_request]

jobs:

quality:

runs-on: ubuntu-latest

steps:

  • uses: actions/checkout@v3
  • uses: shivammathur/setup-php@v2

with:

php-version: &#039;8.2&#039;

  • run: composer install
  • run: composer check-style
  • run: composer check-types</code></pre>

<p>Desse modo, todo PR é analisado automaticamente. Desenvolvedores recebem feedback imediato se código violar padrões ou conter erros potenciais. Isso melhora drasticamente a qualidade e reduz bugs em produção.</p>

<h3>Extensões Úteis</h3>

<p>PHPStan possui extensões para frameworks. Se usar Laravel, instale <code>phpstan/phpstan-laravel</code>. Para Symfony, há <code>phpstan/phpstan-symfony</code>. Essas extensões entendem as convenções do framework e reduzem falsos positivos. Use <code>composer require --dev phpstan/phpstan-laravel</code> e configure em <code>phpstan.neon</code>:</p>

<pre><code class="language-neon">includes:

  • vendor/phpstan/phpstan-laravel/extension.neon</code></pre>

<h2>Conclusão</h2>

<p>PHP_CodeSniffer e PHPStan são complementares: PHPCS garante consistência visual e aderência a padrões (PSR), enquanto PHPStan previne erros reais de lógica e tipo. Juntos, formam uma defesa robusta contra bugs e código frágil. <strong>Primeiro aprendizado</strong>: Use ambas as ferramentas no seu workflow — uma não substitui a outra. <strong>Segundo ponto</strong>: Configure-as no CI/CD para automatizar validação. <strong>Terceiro</strong>: Comece com níveis moderados (PSR-12, nível 7 do PHPStan) e aumente gradualmente conforme o projeto matura.</p>

<h2>Referências</h2>

<ul>

<li><a href="https://github.com/squizlabs/PHP_CodeSniffer" target="_blank" rel="noopener noreferrer">PHP_CodeSniffer - Documentação Oficial</a></li>

<li><a href="https://phpstan.org" target="_blank" rel="noopener noreferrer">PHPStan - Documentação</a></li>

<li><a href="https://www.php-fig.org/psr/psr-12/" target="_blank" rel="noopener noreferrer">PSR-12: Extended Coding Style Guide</a></li>

<li><a href="https://martinfowler.com/articles/testing-strategies.html" target="_blank" rel="noopener noreferrer">Static Analysis in PHP - Martin Fowler</a></li>

</ul>

Comentários

Mais em PHP

Segurança em PHP: XSS, CSRF, Injeção e Boas Práticas Finais: Do Básico ao Avançado
Segurança em PHP: XSS, CSRF, Injeção e Boas Práticas Finais: Do Básico ao Avançado

XSS (Cross-Site Scripting) XSS ocorre quando um atacante injeta código JavaSc...

Como Usar Conexão com MySQL usando PDO em PHP em Produção
Como Usar Conexão com MySQL usando PDO em PHP em Produção

Introdução ao PDO: Por que usar? PDO (PHP Data Objects) é uma abstração de ba...

Boas Práticas de Laravel Migrations e Seeders na Prática para Times Ágeis
Boas Práticas de Laravel Migrations e Seeders na Prática para Times Ágeis

Entendendo Migrations: Versionamento do Seu Banco de Dados Migrations no Lara...