PHPStan
Détecter les bugs avant l'exécution grâce à l'analyse statique de code
Notions théoriques
PHPStan est un outil d'analyse statique qui inspecte votre code PHP sans l'exécuter. Il détecte les erreurs potentielles : appels de méthodes sur des valeurs potentiellement null, types incompatibles, variables non définies, et bien d'autres problèmes.
Pourquoi utiliser PHPStan ?
- Trouver des bugs sans avoir à les déclencher manuellement
- Améliorer la qualité et la robustesse du code
- Faciliter les refactorisations en détectant les régressions de type
- Compléter les tests automatisés (les tests vérifient le comportement, PHPStan vérifie les types)
Niveaux d'analyse (0 à 9)
PHPStan propose 10 niveaux de rigueur :
| Niveau | Ce qu'il vérifie |
|---|---|
| 0 | Erreurs de base (classes/fonctions inexistantes) |
| 1 | Variables potentiellement non définies |
| 5 | Vérification des types de retour |
| 8 | Types nullable stricts |
| 9 | Le plus strict — zéro tolérance |
Pour un nouveau projet, commencez au niveau 5 et montez progressivement.
Installation
composer require --dev phpstan/phpstan
Pour les projets Symfony, installez également l'extension dédiée :
composer require --dev phpstan/extension-installer
composer require --dev phpstan/phpstan-symfony
Fichier de configuration phpstan.neon
parameters:
level: 6
paths:
- src
- tests
Lancer l'analyse
vendor/bin/phpstan analyse
Exemple de mise en application
Considérons cette méthode dans notre contrôleur :
public function show(int $id): Response
{
$player = $this->playerRepository->find($id);
return new Response('Joueur : ' . $player->getName());
}
PHPStan au niveau 5 signalera une erreur :
------ -------------------------------------------------------
Line GameController.php
------ -------------------------------------------------------
8 Cannot call method getName() on App\Entity\Player|null.
------ -------------------------------------------------------
La correction consiste à vérifier que $player n'est pas null avant d'appeler getName().
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
Configurez PHPStan et corrigez les erreurs détectées dans votre projet Symfony
Étape 1 : Créez le fichier phpstan.neon pour analyser le dossier src/ au niveau 6.
Étape 2 : Corrigez l'erreur PHPStan dans la méthode show en vérifiant que $player n'est pas null avant d'appeler getName().
Ajoutez PHPStan dans votre pipeline CI (GitHub Actions, GitLab CI...) pour bloquer les merge requests
qui introduisent des erreurs de type. Commencez au niveau 5 ou 6 sur les nouveaux projets.
Sur un projet existant, utilisez l'option --generate-baseline pour créer une baseline des erreurs
existantes et ne contrôler que les nouvelles.
Une solution
Vous devez être connecté pour voir le contenu.