1. Ce este analiza statică?
Analiza statică verifică codul fără a executa aplicația. Detectează: - erori de tipuri - metode inexistente - proprietăți invalide - probleme de design
În Laravel, combinația standard este:
- PHPStan -- motorul de analiză
- Larastan -- extensie care înțelege Eloquent, Facades, Container, etc.
2. Instalarea PHPStan
composer require --dev phpstan/phpstan
Test rapid:
vendor/bin/phpstan analyse
3. Instalarea Larastan
composer require --dev nunomaduro/larastan
4. Configurarea phpstan.neon
Creează fișierul phpstan.neon:
includes:
- vendor/nunomaduro/larastan/extension.neon
parameters:
paths:
- app
level: 6
checkMissingIterableValueType: false
Niveluri PHPStan
- 0--3: bazic
- 4--6: recomandat pentru majoritatea proiectelor
- 7--9: strict (enterprise)
5. Creșterea nivelului progresiv
Strategie recomandată:
- Începe cu nivel 5--6
- Fixează erorile
- Crește la 7--8
- Elimină folosirea
mixed
6. Folosirea Baseline (pentru proiecte mari)
Dacă proiectul are multe erori existente:
vendor/bin/phpstan analyse --generate-baseline
Va crea:
phpstan-baseline.neon
Adaugă în config:
includes:
- phpstan-baseline.neon
Astfel eviți blocarea pipeline-ului pe erori vechi.
7. Exemple reale de erori detectate
Return type greșit
public function getUser(): User
{
return null;
}
Proprietate inexistentă
$user->fullname;
Tip greșit într-o metodă
public function setAge(int $age)
{
}
$this->setAge("25");
8. Probleme comune în Laravel
Eloquent fără tipuri
Recomandare:
/** @property string $name */
class User extends Model
{
}
Sau folosirea generics în repository.
9. Integrare CI/CD (GitHub Actions)
name: Static Analysis
on: [push]
jobs:
phpstan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: shivammathur/setup-php@v2
with:
php-version: 8.2
- run: composer install
- run: vendor/bin/phpstan analyse
10. Bune practici
- Rulează analiza la fiecare PR
- Nu ignora erori fără justificare
- Folosește tipuri returnate peste tot
- Evită
@phpstan-ignore-next-line - Rulează PHPStan local înainte de commit
11. Nivel strict (exemplu enterprise)
parameters:
level: 9
reportUnmatchedIgnoredErrors: true
Concluzie
Integrarea PHPStan + Larastan într-un proiect Laravel ridică semnificativ calitatea codului, previne bug-uri înainte de runtime și face aplicația mai sigură, predictibilă și ușor de mentenanțat.