PHPStan est un outil d’analyse statique de code PHP assez simple à utiliser.
Si vous développez des petits ou moyens projets, par exemple des sites WordPress cela peut vous aider à augmenter la qualité de votre code et détecter les bugs.
Ainsi PHPStan va :
- 📁 analyser la globalité ou un dossier spécifique (ex : votre thème WordPress)
- 🐛 repérer les erreurs potentielles, les avertissements, les bugs
- 📰 écrire le résultat dans un fichier de log
Le log va ressembler à ceci :
------ ----------------------------------------------------------------------------------
Line wwww/functions.php
------ ----------------------------------------------------------------------------------
:10 Access to an undefined property object::$ID.
:77 Variable $wp_query might not be defined.
:377 Function add_wiki_link() has no return type specified.
:379 Parameter #5 $callback of function add_menu expects callable(): mixed, '' given.
------ ----------------------------------------------------------------------------------
Selon votre niveau de connaissance de PHP, ces retours peuvent sembler obscurs, mais on s'y retrouve vite avec un peu d'entraînement.
D'où vient ce nom ? de PHP Static Analysis !
Qu'est-ce que l’analyse statique ?
L’analyse statique consiste à examiner le code source, sans le lancer, pour identifier sur ~10 niveaux (dans le cas de PHPStan) :
- les erreurs
- les incohérences de typage
- les problèmes potentiels de logique
- plein d’autres trucs
Concrètement : variables qui n’existent pas, fonctions déclarées avec 2 arguments mais appelées avec 3, etc.
On peut aussi s’en servir pour s’assurer par avance de la compatibilité avec une version upgradée de PHP.
Encore un outil de plus ? Oui et non : s’il est intégré par défaut dès le début d'un projet et qu’on connaît la commande, cela permet de gagner du temps en repérant/comprenant un bug potentiel durant / à la fin du développement.
Installation
Avec composer, c'est assez rapide : composer require --dev phpstan/phpstan
, ce qui l'ajoute aux dépendances de développement dans composer.json
:
"require-dev": {
"phpstan/phpstan": "^1.12"
},
Ainsi on pourra lancer vendor/bin/phpstan analyse public/themes >phpstan.log
et lire les contenus du fichier log.
On peut aussi ajouter un script dans composer.json
:
"scripts": {
"phpstan": "phpstan analyse --memory-limit 1024M >phpstan.log"
}
Ce qui permettra de le lancer plus aisément avec composer phpstan
.
Configuration
On ajoute un fichier phpstan.neon
qui va contenir des paramètres basiques :
scanDirectories
: permet de prendre connaissance des déclarations PHP existantesscanFiles
: permet de connaître des variables déjà définieslevel
: niveau d'exigeancepaths
: liste des chemins réellement analysés
Exemple concret pour un projet WordPress
parameters:
scanDirectories:
- public/wordpress
- public/plugins
- public/mu-plugins
scanFiles: # permet de connaître des variables custom
- public/wp-config.php
level: max
paths:
- public/themes
On pourra aussi ajouter des règles à ignorer (les plus inoffensives évidemment) lorsqu'on le nombre de lignes relevées est trop important et qu'on ne peut pas tout ré-adapter dans un framework qui ne satisferait pas pleinement PHPStan.
ignoreErrors:
- '#Cannot access offset .*#'
- '#Cannot access property .*#'
- '#Parameter .* of echo cannot be converted to string#'
- '#Parameter .* function .* expects .* mixed given#'
- '#While loop condition is always true#'
- '#code above always terminates#'
Autres outils ?
Ce n'est pas le seul de sa catégorie, il existe aussi
- Psalm (par Vimeo) https://psalm.dev/
- Phan https://github.com/phan/phan
- PHP CodeSniffer https://github.com/squizlabs/PHP_CodeSniffer
Pas mal non ?
Commenter
Vous devez être inscrit et identifié pour utiliser cette fonction.
Connectez-vous (déjà inscrit)
Pas encore inscrit ? C'est très simple et gratuit.