Retrouvez cet article dans : Linux Magazine 101
1. De l’intérêt des conventions de codage
Avant d’entrer dans le vif du sujet, je voudrais souligner l’importance de définir (et bien sûr de respecter) des conventions de codage, et ce, d’autant plus, dans un langage permissif tel que le PHP. Pour beaucoup de gens, il peut sembler inutile ne serait-ce que d’indenter de manière très stricte leur code. Plutôt que d’essayer de vous convaincre à grand renfort d’arguments sur la lisibilité et la maintenabilité, il me semble plus simple de vous proposer un exemple de code totalement déstructuré.01: <?php 02: $tab=array(‘A’=>5,’B’=>2,’C’=>7,’D’=>array(‘cle1’=>’A’,’cle2’=>’B’,’cle3’=>’C’)); 03: for($i=0;i<10;$i++) 04: if ($tab[$tab[‘D’][‘cle2’]]==$i) echo ‘Trouvé !’; 05: ?>Voici le même code correctement indenté :
01: <?php
02:
03: $tab = array(
04: ‘A’ => 5,
05: ‘B’ => 2,
06: ‘C’ => 7,
07: ‘D’ => array(
08: ‘cle1’ => ‘A’,
09: ‘cle2’ => ‘B’,
10: ‘cle3’ => ‘C’
11: )
12: );
13:
14: for ($i = 0; i < 10; $i++)
15: {
16: if ($tab[$tab[‘D’][‘cle2’]] == $i)
17: {
18: echo ‘Trouvé !’;
19: }
20: }
21: ?>
Si vous êtes l’auteur du premier morceau de code et que votre développement n’a pas été effectué depuis plus de deux semaines, vous devriez pouvoir vous rappeler de ce que vous avez voulu écrire. Dans tous les autres cas, la compréhension de ces 5 lignes vous prendra beaucoup plus de temps que si elles avaient été correctement indentées (voir les 20 lignes du deuxième exemple). Bien sûr, certains pourront affirmer avec raison que le premier fichier, plus compact, occupera moins d’espace disque et sera exécuté plus rapidement. Si vous recherchez à minimiser la taille de vos fichiers, rien ne vous empêche d’avoir deux versions de vos codes :
- une version contenant les codes sources ;
- une version de production qui sera " optimisée " (suppression des commentaires et des espaces/tabulations d’indentation). À ce propos, vous pourrez voir la fonction
php_strip_whitespace()[2].
2. PHPCheckStyle
Dans cette partie, je vais vous présenter PHPCheckStyle depuis son installation, son utilisation, jusqu’à la façon de l’adapter (dans la mesure du possible) à vos conventions.2.1 Installation
Tout d’abord, il va falloir récupérer PHPCheckStyle sous la forme d’un fichier zippé (cp spikephpcheckstyle-0.6.zip /opt cd /opt unzip spikephpcheckstyle-0.6.zip mv spikephpcheckstyle-0.6 phpcheckstyle rm spikephpcheckstyle-0.6.zipCet outil est codé en PHP et le fichier principal à lancer ne porte pas un nom particulièrement explicite :
mv /opt/phpcheckstyle/run.php /opt/phpcheckstyle/phpcheckstyle.phpNous pouvons maintenant créer un alias qui nous permettra d’exécuter PHPCheckStyle depuis n’importe quel répertoire. Pour cela, nous allons modifier le fichier de configuration de votre shell. Je donne un exemple ici pour un shell bash (fichier
alias phpcheckstyle=’php /opt/phpcheckstyle/phpcheckstyle.php’Pour activer la modification, nous devons exécuter :
source .bashrcL’installation est achevée et nous pourrons faire appel à
2.2 Vérification du code
Pour tester PHPCheckStyle, nous allons créer un petit script PHP d’exemple qui ne respecte pas les conventions de codage PEAR (ces conventions correspondent au paramétrage par défaut de PHPCheckStyle). Voici le fichier01: <?PHP
02: echo ‘Fichier de test pour PHPCheckStyle<br />’;
03: for ($_i=0; $_i<10; $_i++)
04: {
05: echo ‘Compteur : ‘.$_i.’<br />’;
06: }
07: ?>
Pour lancer la vérification sur ce fichier, il faut exécuter :
phpcheckstyle --src teststyle.phpPHPCheckStyle va créer, dans le répertoire courant, un répertoire
phpcheckstyle --src teststyle.php --outdir /home/reportsVous trouverez en figure 1 la page de résultat produite.

Figure 1 : Page de résultat de PHPCheckStyle sur l’exemple teststyle.php
Cette page nous signale 10 erreurs ou non-respects de la convention de codage et nous indique comment y remédier. Voici le résumé des erreurs rencontrées :- en ligne 1, il aurait fallu écrire PHP en minuscules ;
- en ligne 3, il aurait fallu mettre des espaces avant et après les caractères " = " et " < " ;
- en ligne 4, l’accolade ouvrante aurait dû se trouver à la fin de la ligne 3 (les conventions PEAR utilisent la notation Kernighan et Ritchie) ;
- enfin, en ligne 5, les opérateurs de concaténation " . " auraient dû être précédés et suivis d’un caractère d’espacement.

Figure 2 : Page de résultat de PHPCheckStyle sur l’exemple teststyle.php après correction
Pour traiter un répertoire contenant un projet et donc de nombreux fichiers PHP, il suffira d’invoquer PHPCheckStyle en indiquant le nom du répertoire : phpcheckstyle --src projet La page de résultat comprendra alors des informations sur le nombre de fichiers analysés et décrira pour chacun d’eux les erreurs relevées. Voyons maintenant comment paramétrer PHPCheckStyle en fonction de nos propres conventions.2.3 Configuration
Le fichier de configuration de PHPCheckStyle se trouve dans le fichier XML
3. Un formateur de code : PHP_Beautifier
En guise de préambule à cette partie, je tiens à attirer votre attention sur le fait que l’on pourrait penser que les outils de formatage de code servent à s’affranchir définitivement des conventions de codage (puisque ces derniers se chargent du formatage), mais attention :- D’une part, tous les outils de formatage ont des limites : vous devrez de toute façon retravailler le code après leur passage.
- D’autre part, prendre l’habitude de mal présenter son code est une très mauvaise habitude : pendant au moins toute la phase de conception, vous travaillerez avec un code moins lisible (même si, dans un court laps de temps, vous arrivez à vous relire) et vous serez donc moins efficace.
pear install PHP_Beautifier-0.1.13Vous venez d’installer la bibliothèque PHP_Beautifier. Encore faut-il maintenant l’utiliser. Imaginons que nous disposions du code non formaté suivant :
01: <?PHP
02: $var=4;
03: if ($var == 3) echo $var;
04: for ($i=1;$i<10; $i++) {echo $i; }
05: ?>
Souhaitant formater ce code en utilisant les normes PEAR. Nous allons créer un script utilisant la bibliothèque PHP_Beautifier. Puisque la documentation disponible sur le site officiel [4] est très complète, mais totalement dénuée d’exemples, je vous propose d’en analyser un que nous appellerons 01: #!/usr/bin/php -q
02: <?php
03: require_once ‚PHP/Beautifier.php‘;
04:
05: // On récupère le nom du fichier
06: if ($argc != 2)
07: {
08: die(‘Syntaxe: PHPBeautifier <nom_fichier>’ . "\n");
09: }
10: $_file = $argv[1];
11: if (!is_file($_file))
12: {
13: die(‘Nom de fichier incorrect’ . "\n");
14: }
15:
16: try
17: {
18: $_beauty = new PHP_Beautifier();
19: $_beauty->setIndentNumber(2);
20: $_beauty->setIndentChar(‘ ‘);
21: $_beauty->setNewLine(“\n”);
22: $_beauty->addFilter(‘ArrayNested’);
23: $_beauty->addFilter(‘IndentStyles’, array(‘style’ => ‘bsd’));
24: $_beauty->addFilter(‘Pear’, array(‘add_header’ => ‘php’));
25: $_beauty->setInputFile($_file);
26: $_beauty->setOutputFile(‘beautified_’ . $_file);
27: $_beauty->process();
28: $_beauty->save();
29: }
30: catch (Exception $e)
31: {
32: echo $e;
33: }
34: ?>
Comme l’indique la ligne 1, ce code est écrit en PHP CLI (ligne de commandes pour PHP). Il vous suffira de rendre le script exécutable (- en ligne 18, on crée un objet
PHP_Beautifier; - la ligne 19 définit le nombre de caractères définissant une indentation et la ligne 20 définit le caractère qui représentera cette indentation. J’ai défini ici une indentation comme étant deux caractères espace (la norme PEAR est de quatre espaces) ;
- la ligne 21 définit le caractère de saut à la ligne (ici le saut à la ligne standard :
\n) ; - en ligne 22, on active l’indentation des structures de table. En effet, un tableau écrit sous la forme :
array(‘A’=>’elt1’,’B’=>array(‘B1’=>’E1’,’B2’=>’E2’));sera réécrit sous la forme :
array(
‘A’ => ‘elt1’,
‘B’ => array(
‘B1’ => ‘E1’,
‘B2’ => ‘E2’
)
);
- en ligne 23, on définit le style d’indentation des structures (position des accolades après une boucle
forpar exemple). De nombreux styles sont disponibles [5] dont‘k&r’pour Kernighan et Ritchie. Préférant la notation BSD, je l’ai activée grâce au paramètre‘bsd’; - en ligne 24, on active le formatage avec les conventions PEAR. Le second paramètre
array(‘add_header’ => ‘php’)est optionnel. Il permet d’ajouter automatiquement des commentaires en début de fichier. Il s’agit ici du fichier de licence PHP disponible dans/usr/share/php/data/PHP_Beautifier/licenses/php.txt(d’autres fichiers de licence sont disponibles : PEAR, BSD, APACHE et LGPL). Vous pourrez bien sûr modifier le contenu de ce fichier ou en créer un nouveau en cas de besoin. - enfin, dans les lignes 25 à 28, on définit le fichier d’entrée (ligne 25), le fichier de sortie (ligne 26) et, enfin, on lance le reformatage du code et on le sauvegarde dans le fichier de sortie.
beautify_php mon_fichier.phpCette exécution va générer un nouveau fichier reformaté beautified_mon_fichier.php dans le répertoire courant. Sur l’exemple du code non formaté précédent, cela donne (les différences sont notées en rouge et les caractères espaces ajoutés sont notés □) :
01: <?php
02: $var□=□4;
03: if ($var == 3) echo $var;
04: for ($i□=□1;□$i□<□10; $i++)
05: {
06: ..echo $i;
07: ..□
08: }
09: ?>
Comme vous pouvez vous en rendre compte, le code généré doit être retravaillé :
- les indentations en début de ligne ont toutes été supprimées ;
- en ligne 3, le code
echo $var;devrait se trouver à la ligne et entre accolades ; - la ligne 7 est une ligne inutile.

Conclusion
En conclusion, dans cet article, je vous ai présenté deux outils complémentaires PHPCheckStyle et PHP_Beautifier. L’un permet de vérifier de manière systématique la bonne application des conventions de codage et l’autre permet de reformater rapidement un code. Grâce à PHPCheckStyle, il est très simple de contrôler que chaque fichier de vos projets respecte bien les conventions de codage qui ont été mises en place. La correction se fait rapidement grâce aux indications fournies dans le rapport. Vous gagnerez énormément en lisibilité et le travail collaboratif en sera facilité. De plus, la mise en place de vérifications systématiques de nuit (grâce à unBibliographie
- [1] http://pear.php.net/manual/fr/standards.php
- [2] http://fr.php.net/manual/fr/function.php-strip-whitespace.php
- [3] http://pear.php.net/package/PHP_Beautifier
- [4] http://beautifyphp.sourceforge.net/docs/
- [5] http://beautifyphp.sourceforge.net/docs/PHP_Beautifier/Filter/PHP_Beautifier_Filter_IndentStyles.html
Retrouvez cet article dans : Linux Magazine 101





Laissez une réponse
Vous devez avoir ouvert une session pour écrire un commentaire.