Séverin Bruhat

<< Back to the list

PHP : bonnes pratiques et conventions

21 May 2014

Introduction

L'écosystème PHP est vaste et complet : beaucoup d'outils, frameworks et CSM sont disponibles, la communauté est importante et active, les entreprisent recrutent, les clients sont nombreux.... Dans un monde faisant intervenir autant d'acteurs, il est important de suivre certaines "normes" afin d'assurer la pérénité des projets (et du langage). Ces conventions ont pour but de fournir des bonnes pratiques afin d'homogénéiser les développements et de simplifier la maintenabilité du code. En effet, un projet PHP qui respecte les normes est plus facile à prendre en main par un nouveau développeur et ainsi plus simple à maintenirqu'un projet ne les respectant pas.

Il existe 3 grands standards PHP :

Je vais, dans cet article, parler de la convention PSR qui tend à devenir le standard respecté par Symfony notamment. 

Les normes PSR

PSR-0 : autoloading

L'objectif de la PSR-0 est de rendre standard le chargement des classes afin d'éviter les "include" et "require". Ce système d'autoloading repose sur la bonne utilisation des namespaces. Voici la liste des principales règles :

Le fichier d'autoload généré est par Composer, par exemple, respecte cette norme.

PSR-1 : La norme de codage de base

La PSR-1  décrit les éléments standards de codage nécessaires pour assurer un niveau élevé d'interopérabilité technique pour le partage du code PHP. Cette norme concerne : les fichiers, les espaces de nom et noms des classes ainsi que les constantes de classe, propriétés et méthodes :

Vous trouverez des exemples concrets ici : http://www.php-fig.org/psr/psr-1/fr/.
Personnellement je trouve que cette règle est importante est doit être respectée au maximum car elle améliore la lisibilité du code.

PSR-2 : Guide pour le style d'écriture de code

La norme PSR-2 complète la PSR-1 et décrit les bonnes pratiques en matière de programmation. Vous trouverez ci-dessous la vue d'ensemble des points décrit dans la documentation officielle :

Cette convention est souvent controversée car elle est considérée comme trop "rigide". De mon point de vue, il faut adopter une règle est la respecter. Ainsi, si vous intervenez sur des projets déjà avancés, calquez vous sur ce qui est déjà en place (notamment pour les accolades et l'indentation). Le principal étant simplement de rester cohérent avec l'implémentation déjà effectuée et la méthodologie adoptée par les développeurs travaillant sur le projet.

PSR-3 : Interface pour les logs

L'objectif de la PSR-3 est de définir comment seront gérés les logs de votre application. Comme dans la majorité des cas vous utilisez une librairie dédiée au log, le plus simple est d'en choisir une répondant à cette norme ;) telle que Monolog par exemple. Voici les concepts de base :

PSR-4 : autoloading avancé

Cette norme complète la PSR-0. Alors que cette dernière se concentre principalement sur les namespaces et noms de classes, la PSR-4 fixe des règles concernant l'arborescence des fichiers. Vous trouverez plus d'informations ici : http://www.php-fig.org/psr/psr-4/.

Le fichier d'autoload généré par Composer, par exemple, respecte également cette norme (en plus de la PSR-0).

Quelques outils

PHP Coding Standards Fixer : développé parSensio Labs (Symfony) pour passer du code aux normes PSR

https://github.com/duodraco/phpcs-psr : un jeu de règles pour PHP Code Sniffer (phpcs)

Conclusion

Dans le cadre d'un processus d'intégration continu, vous pouvez envisager d'utiliser les hook de pré-commit afin de forcer les développeurs à respecter certaines des conventions ci-dessus. Ainsi, si le code n'est pas "PSR compliant",  le développeur devra l'adapter afin de pouvoir commiter.

Cet article est une simple introduction à la norme PSR. Si vous êtes pour ou contre les conventions, si vous souhaitez apporter des informations complémentaires, si vous préférez une autre convention que la PSR ou bien tout simplement si vous souhaitez vous exprimez : laissez un petit commentaire ci-dessous.