Vous venez une énième fois de casser la production de votre projet PHP à cause d’une “erreur bête” ? Vous vous dites que ce serait génial d’avoir un petit robot pour vous prévenir ? 

Nous vous présentons PHPStan : cet outil est un analyseur de code statique. Son but est de déceler les faiblesses présentes dans votre code afin de vous avertir d’une erreur potentielle.

Avec une configuration avancée, il peut aussi s’assurer du respect de nombreuses bonnes pratiques ou encore vous aider à transformer du code déprécié.

En gros, c’est votre garde fou PHP. C’est lui qui vous empêchera de nombreuses fois de tomber dans une crevasse ! 😀

Un petit exemple ? Ca tombe bien, vous pouvez jouer directement jouer avec sur leur site !

Voici le nôtre : Playground Nexylan PHPStan

Au programme de cet article :

1. Utilisation
2. Configuration recommandée
3. À vous de jouer

1- Utilisation

Prérequis

PHPStan est un outil récent et requiert PHP 7.1 minimum. Cependant, cette version n’est requise que pour son exécution. Il reste tout à fait possible d’utiliser PHPStan sur un ancien projet PHP 5.x, cependant, l’outil offrira une analyse moins fiable car votre projet ne bénéficie pas du typage stricte.

Installation

Vous avez plusieurs manières d’installer PHPStan. Nous les listons ci-après avec quelques commentaires pour vous permettre de trouver chaussure à votre pied. 😉

 > Le plus commun est d’ajouter PHPStan en tant que dépendance composer de votre projet, le rendant directement accessible dans son dossier vendor/bin.

C’est la méthode la plus simple, cependant elle peut parfois poser des soucis de conflits entre les dépendances de votre projet et celles de PHPStan, rendant son installation impossible.

 > Vous pouvez toutefois contourner cette dernière limitation en utilisant l’extension composer bin, vous permettant une installation de l’outil via composer mais avec un environnement hermétique.

 > Une solution encore plus simple est de télécharger directement le fichier PHAR.

Utile pour le tester rapidement, mais très vite limité par l’impossibilité d’utiliser les extensions, s’installant via composer.

 > Pour les fans de la baleine bleue, il existe aussi une image Docker officielle !

Elle est livrée avec l’outil PHPStan prêt à l’usage, mais elle est aussi conçue pour vous permettre de faire votre propre image avec vos extensions et votre configuration.

Cela est très pratique si vous souhaitez appliquer facilement les règles PHPStan sur l’ensemble des projets PHP de votre groupe, ou encore pour ajouter une tache CI (Continuous Integration) avec un utilitaire compatible Docker.

C’est aussi une bonne alternative pour exécuter l’outil sur des anciens projets ne supportant pas PHP 7.1 ou supérieur.

Une fois installé, il vous suffit de lancer la commande analyse pour commencer une analyse. Plus d’infos par ici : https://phpstan.org/user-guide/getting-started#first-run

Extensions

PHPStan en soit permet déjà beaucoup de choses, cependant il existe aussi des dizaines d’extensions permettant de compléter la panoplie de règles possibles globalement ou par types de projets.

Vous pouvez retrouver la liste complète ici : https://phpstan.org/user-guide/extension-library

Si vous ne savez pas quoi choisir, voici nos trois préférés :

   > phpstan-strict-rules : Si vous pensez qu’un code fiable est un code stricte, ce plugin est fait pour vous.

   > phpstan-deprecation-rules : Ce plugin détecte les usages dépréciés. Il est très utile pour réaliser un upgrade majeur d’une dépendance sans encombre, ou encore préparer un refactor en dépréciant vos propres ressources à l’aide du tag @deprecated.

   > phpstan-disallowed-calls : Un ensemble de règles pour détecter les appels à des méthodes dont l’utilisation serait dangereuse en production. Aussi utile pour mettre en place rapidement des bonnes pratiques spécifiques à son groupe.

Certaines extensions permettent aussi à PHPStan de bien mieux fonctionner avec certains frameworks et outils qui ne sont pas encore totalement à la page avec le typage stricte ou en désaccord avec certaines règles. C’est le cas pour Symfony, Doctrine ou encore PHPUnit que nous utilisons, mais il y en a bien d’autres.

Enfin, pour les plus téméraires, il est aussi possible de créer sa propre extension avec ses propres vérificateurs de code.

Une documentation complète est disponible ici : 
https://phpstan.org/developing-extensions/extension-types

2- Configuration recommandée

PHPstan permet une grande flexibilité via son système de configuration. Nous allons ici vous détailler quelques bonnes pratiques.

Le niveau d’analyse

PHPStan offre plusieurs niveaux de tolérance, allant actuellement de 0 à 9.

Nous vous recommandons à terme d’utiliser l’alias de niveau max afin de s’assurer de toujours utiliser le niveau de contrôle le plus élevé lors des mises à jour de l’outil.

Retrouvez les détails des différents niveaux sur ce lien : 

https://phpstan.org/user-guide/rule-levels

Sauvegarder l’état de votre projet

Vous êtes convaincu par cet outil, vous l’installez et le lancez sur le projet que vous maintenez depuis plusieurs années, mais malheur, vous détectez plusieurs milliers d’erreurs ?

Vous avez le choix : perdre parfois jusqu’à plusieurs mois sur des corrections, pour d’autres abandonner, ou… utiliser le baseline !

Le baseline est ni plus ni moins qu’un fichier de configuration PHPStan généré par lui-même, listant l’intégralité des erreurs actuelles et ajoutant des règles d’ignorance pour chacune.

Dit autrement, générer et inclure ce fichier fait disparaitre vos erreurs à l’instant T.

Combiné avec un outil de versionning (git, svn…), il vous permet d’introduire dès maintenant les nouvelles règles d’analyse tout en ayant le temps de résoudre les anciennes erreurs plus tard.

3- À vous de jouer !

PHPStan est un outil très puissant vous évitant pas mal d’ennuis futurs sur vos production. Attention cependant, il ne remplace en aucun cas le concept des tests automatisés mais va plutôt les compléter.

Il faut aussi rappeler que PHPStan ne peut pas tout voir de par son rôle d’analyste statique. Il peut passer a coté de potentielles erreurs, comme sur de la génération de logique à la volée.

En bref, PHPStan deviendra votre compagnon de tous les jours et vous aidera à faire des mise en prod le vendredi à 18H en toute sérénité ! 😉

Alors, qu’attendez-vous ? Essayez-le !

Vous souhaitez en savoir plus ?

Pour toutes questions, n’hésitez pas à contacter nos équipes.