Comprendre le mécanisme
PHPStan examine le code et ses types sans exécuter les parcours métier habituels. Son résultat dépend de sa version, de la configuration, des extensions, des chemins et de la cible PHP. Une installation locale de développement avec lock versionné rend le contrôle plus reproductible qu’un outil global mis à jour sans suivi. Distinguez le PHP qui exécute l’analyse et la version cible décrite par la configuration.
Raisonner et vérifier
Analysez les classes utiles et leurs contrats, avec les stubs ou extensions nécessaires. Une découverte de symboles mal configurée peut produire des erreurs trompeuses ; exclure massivement le code masque le problème. La pipeline doit échouer si l’analyse échoue et rendre les diagnostics exploitables. Ne publiez pas les secrets du fichier d’environnement pour obtenir un rapport de types.
Version de l’analyseur
La version de PHPStan influence les diagnostics. Les versions peuvent faire évoluer les vérifications. Deux versions peuvent comprendre différemment une annotation ou ajouter un diagnostic. Enregistrez la version utilisée avec le rapport pour pouvoir reproduire le résultat lors d’une revue de release.
Understand this common mistake
Tout exécutable PHPStan produit le même rapport pour toujours.
Les versions peuvent faire évoluer les vérifications.
Dépendances verrouillées
Le lock aide à reproduire les dépendances. Il décrit les dépendances résolues, pas les credentials. Exécutez composer install à partir du lock révisé plutôt que résoudre de nouvelles versions à chaque job. Les extensions et leurs dépendances influencent aussi le résultat, pas seulement le binaire principal.
Understand this common mistake
Le lock contient les secrets nécessaires à l’analyse.
Il décrit les dépendances résolues, pas les credentials.
Version cible et runtime
La cible PHP doit être configurée correctement. L’analyse et le runtime sont des environnements distincts. phpVersion: 80400 décrit PHP 8.4 pour l’analyse. Cette configuration n’installe aucun interpréteur ; vérifiez séparément les versions de PHP en CLI, dans les workers et dans le serveur web.
Understand this common mistake
phpVersion met automatiquement à jour l’interpréteur réel.
L’analyse et le runtime sont des environnements distincts.
Périmètre des chemins
Les chemins analysés déterminent la couverture. Un fichier exclu échappe aux contrôles concernés. Si seul src est analysé, un script d’import placé dans bin peut rester hors rapport. Inventoriez les points d’entrée et justifiez exclusions et code généré avant d’interpréter une suite verte.
Understand this common mistake
Exclure src conserve une analyse complète de src.
Un fichier exclu échappe aux contrôles concernés.
Extensions de framework
Les extensions peuvent préciser des contrats de framework. La découverte de symboles doit correspondre aux bibliothèques. Une extension Symfony ou Doctrine décrit des comportements que le code dynamique rend difficiles à inférer. Vérifiez sa compatibilité et gardez un test d’exécution pour les services ou repositories réellement utilisés.
Understand this common mistake
Un framework dynamique n’a jamais besoin de configuration adaptée.
La découverte de symboles doit correspondre aux bibliothèques.
Échec observable
Une erreur d’analyse doit faire échouer la CI prévue. Le contrôle doit participer à la décision de qualité. Le pipeline doit respecter le code de sortie de l’analyseur. Une commande suivie de true peut imprimer des erreurs tout en laissant publier ; testez le job avec un défaut volontaire dans une branche de laboratoire.
Understand this common mistake
La CI doit ignorer tout code de retour non nul.
Le contrôle doit participer à la décision de qualité.
Même configuration
Les configurations locale et CI doivent être cohérentes. La version et les options peuvent diverger. Un fichier local prioritaire peut masquer la configuration distribuée utilisée en CI. Appelez explicitement le fichier attendu et comparez niveau, chemins et extensions avant de conclure à une différence de comportement inexplicable.
Understand this common mistake
Une installation globale non suivie est toujours identique à la CI.
La version et les options peuvent diverger.
Analyse sans parcours
L’analyse statique ne rejoue pas tous les parcours métier. Son périmètre diffère d’une exécution fonctionnelle. PHPStan raisonne sur le code et ses contrats ; il ne simule pas chaque demande utilisateur. Les permissions, courses concurrentes et effets prestataire doivent disposer d’autres preuves ciblées.
Understand this common mistake
PHPStan se connecte automatiquement à tous les scénarios réels.
Son périmètre diffère d’une exécution fonctionnelle.
Sans secrets de production
Les secrets ne sont pas nécessaires à un rapport de types. Les diagnostics peuvent rester sans credentials réels. Ne chargez pas une connexion réelle simplement pour découvrir des types. Utilisez des contrats et une configuration de bootstrap minimale ; un analyseur ne doit pas devenir une voie d’accès aux données clientes.
Understand this common mistake
Il faut publier .env pour comprendre un type de retour.
Les diagnostics peuvent rester sans credentials réels.
Découverte des symboles
Une mauvaise découverte doit être corrigée à sa cause. L’exclusion masque la couverture au lieu de rétablir les symboles. Si une classe reste inconnue, contrôlez autoload, namespace et dépendances. Un ignore global ferait disparaître le symptôme tout en laissant l’analyse perdre des informations sur les appels concernés.
Understand this common mistake
Exclure tout le code est une correction de contrat.
L’exclusion masque la couverture au lieu de rétablir les symboles.
Atelier guidé : lire, expliquer et vérifier le code
parameters:
level: 8
phpVersion: 80400
paths:
- src Lisez chaque clé de la configuration puis comparez-la aux commandes réellement exécutées en CI. La version cible n’est ni un gestionnaire de runtime ni une garantie de compatibilité de toutes les dépendances. Produisez un rapport reproductible à partir du même lock et du même fichier de configuration.
La valeur décrit la version cible, sans provisionner le runtime. Le paramètre n’installe aucun interpréteur. Seul src est explicitement dans les chemins montrés. Le typage ne remplace pas les scénarios exécutés.
Travail pratique : Exécutez l’analyse localement et en CI sur le même commit avec le même lock, puis introduisez un type de retour incohérent.
Critères de correction : Les deux environnements doivent signaler la régression et la CI doit retourner un échec. Conservez la version et le chemin de configuration dans le diagnostic, sans contenu sensible.
Worked example
composer require --dev phpstan/phpstan
vendor/bin/phpstan analyse -c phpstan.neon --no-progress
# Exemple de configuration pour le laboratoire
parameters:
level: 8
paths:
- src
phpVersion: 80400La configuration vise PHP 8.4 ; le niveau choisi est un point de départ pédagogique, pas une certification.
Practical exercise
Exécutez l’analyse localement et en CI sur le même commit avec le même lock, puis introduisez un type de retour incohérent.
View a suggested solution
Les deux environnements doivent signaler la régression et la CI doit retourner un échec. Conservez la version et le chemin de configuration dans le diagnostic, sans contenu sensible.
Verification checklist
- Outil versionné.
- Cible PHP définie.
- Échec propagé à la CI.
Knowledge check
Related lesson: 01. Installation et analyse reproductibles ↗Module validation
101 questions, local practice target of 75%. Suggested duration of 150 minutes, with no enforced deadline. Questions and choices are shuffled; corrections appear after submission. The quick lesson check and the final course exam remain separate exercises.
Start or resume the 101 questions →This records your own progress and does not certify mastery. Complete the exercise before moving on.
