Aller au contenu principal

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 :

NiveauCe qu'il vérifie
0Erreurs de base (classes/fonctions inexistantes)
1Variables potentiellement non définies
5Vérification des types de retour
8Types nullable stricts
9Le 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


Que fait PHPStan ?


Combien de niveaux d'analyse PHPStan propose-t-il ?


Quel est le fichier de configuration de PHPStan ?


Quelle commande lance l'analyse PHPStan ?


Quel niveau PHPStan est recommandé pour commencer sur un nouveau projet ?



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


Bonne pratique - Intégrer PHPStan dans la CI/CD

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