<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"><?xml version="1.0" encoding="UTF-8"?>
<ruleset name="Meu Padrão">
<description>Padrão de código para o projeto</description>
<arg name="basepath" value="."/>
<arg name="colors"/>
<arg name="parallel" value="8"/>
<file>src</file>
<file>tests</file>
<exclude-pattern>/migrations/</exclude-pattern>
<exclude-pattern>/vendor/</exclude-pattern>
<rule ref="PSR12">
<exclude name="Generic.WhiteSpace.DisallowTabIndent"/>
</rule>
</ruleset></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:
- '#Access to undefined property#'</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">{
"scripts": {
"check-quality": [
"@check-style",
"@check-types"
],
"check-style": "phpcs",
"fix-style": "phpcbf",
"check-types": "phpstan analyse"
}
}</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: '8.2'
- 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>