PHPMD ou PHP Mess Detector, est un analyseur de code PHP pour assurer la qualité de code. L’analyse de coude source permet de détecter plusieurs problèmes potentiels, tel-que :
- Les bugs potentiels
- Code non optimisé
- Expressions trop compliquées (if-else, …)
- Code non utilisé (variables, méthodes, propriétés)
Installation de PHPMD
PHP Mess Detector est disponible via PEAR :
pear channel-discover pear.phpmd.org pear channel-discover pear.pdepend.org pear install --alldeps phpmd/PHP_PMD
Nous pouvons aussi l’installer en récupérant son fichier .phar :
wget -c http://static.phpmd.org/php/latest/phpmd.phar chmod +x phpmd.phar mv phpmd.phar /usr/local/bin/phpmd
Utilisation de PHPMD
Afin de détecter ces problèmes, PHP Mess Detector applique certaines règles pour vérifier la qualité de votre code. La liste des règles peut se trouver ici.
L’utilisation de PHP est simple, il suffit de passer la liste des règles que nous désirons les vérifier en tant que paramètre séparé par une virgule ou passer un fichier xml contenant ces règles, le rapport généré peut être sous 3 formats : xml, text ou html.
#Vérifier le dossier src/ phpmd src html /path/to/phpmd.xml > myreport.html #ou un fichier bien spécifique phpmd src/AppBundle/Controller/DefaultController.php text codesize,unusedcode,naming
Voici un exemple d’un fichier XML contenant Les règles que je les utilise avec mes projets Symfony2
<?xml version="1.0"?> <ruleset name="PHPMD ACSEO RULESET" xmlns="http://pmd.sf.net/ruleset/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd" xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd"> <description>Règles PHPMD pour Symfony2</description> <rule ref="rulesets/codesize.xml/CyclomaticComplexity" /> <rule ref="rulesets/codesize.xml/NPathComplexity" /> <rule ref="rulesets/codesize.xml/ExcessiveClassComplexity" /> <rule ref="rulesets/codesize.xml/ExcessiveClassLength" /> <rule ref="rulesets/codesize.xml/ExcessiveMethodLength" /> <rule ref="rulesets/codesize.xml/ExcessiveParameterList" /> <rule ref="rulesets/design.xml/EvalExpression" /> <rule ref="rulesets/design.xml/ExitExpression" /> <rule ref="rulesets/design.xml/GotoStatement" /> <rule ref="rulesets/naming.xml/ConstructorWithNameAsEnclosingClass" /> <rule ref="rulesets/unusedcode.xml/UnusedFormalParameter" /> <rule ref="rulesets/unusedcode.xml/UnusedLocalVariable" /> <rule ref="rulesets/unusedcode.xml/UnusedPrivateField" /> <rule ref="rulesets/unusedcode.xml/UnusedPrivateMethod" /> </ruleset>
Le résultat de PHPMD ressemblera à ceci :
src/UserBundle/Controller/RegistrationController.php:227 Avoid unused parameters such as '$form'. src/UserBundle/Controller/RegistrationController.php:227 Avoid unused parameters such as '$request'. src/UserBundle/Controller/RegistrationController.php:227 Avoid unused parameters such as '$dispatcher'.