Propreté, lisibilité, maintenabilité

Eléphant du PHP | 312 Messages

03 mars 2006, 15:38

A l'époque à laquelle nous vivons, les entreprises ne se contentent plus vraiment d'une application fonctionnelle réalisée sur le pouce.
On ne cesse d'entendre l'éternel refrain : "ton code est-il maintenable ?"

Mais tout d'abord, à quoi ressemble du code PHP maintenable ?
Quels sont vos petits trucs pour avoir du code clair, propre, facile à débugger par vous-même ou par un autre développeur ?

Ces petits trucs peuvent être divers, ça peut toucher à la fois les norms de codage, les choix préférés pour le développement, les outils utilisés, etc.

Quelques exemples :
- vos fichiers sont-ils un mix de HTML et de PHP ? du PHP pur avec le code HTML écrit à base de "echo" ? des fichiers HTML, du code PHP et un moteur de template au milieu ? autre chose encore ?

- essayez-vous d'avoir du code ne dépassant pas 80 colonnes ? comment scindez-vous un appel de fonction qui est trop long ? et une requête SQL ?

- faites-vous en sorte que le HTML généré soit indenté pour faciliter le debug ? comment procédez-vous ?

- organisez-vous un fichier PHP "basique" en parties ?

- utilisez-vous des fichiers ne contenant que des données figées ? en PHP ? en XML ? en texte ?

etc.

Mammouth du PHP | 1511 Messages

03 mars 2006, 16:38

Pour ma part j'utilise un systeme de templates.
Mes dossier sont organisés de la facon suivante :

Code : Tout sélectionner

racine du site |-home |-admin(partie admin du site) |-includes(mes fonctions, mes fichiers indispensables au bon fonctionnement et fonctionnant en arriere pla) |-config(fichier de configuration de mon site |-templates ||-design classés par id(01,02,03, etc) |||-css |||-images ||-guides(fichier templates) |-language(mon fichier de language contenant un tableau $lang) |.htaccess |default.php |mes pages.php(ce n'est pas le vrai nom de mes autre fichiers :p, c'est juste pour dire que tout est la est que mon index c'est default.php...)
Avec une organisation comme celle-ci, je n'ai a mettre a la racine de mon site que les fichiers qui sont consltables via une URL
Sinon pour les fichiers a telecharger, j'ai un sous domaine dev.monsite.ext

ViPHP
ViPHP | 1024 Messages

03 mars 2006, 22:09

Disons qu'au niveau du code, il faut s'organiser: architecture + regles de codage, quelles qu'elles soient, ça donne un fil directeur.

Au boulot, je bosse sur certaines applis en PHP depuis bientot 2 ans et demie; au gré des modifications à apporter, des besoins qui changent, des priorités, le code évolue; mes codes du début sont immaintenable, les suivants s'améliorent, le code actuel va d"chirer dans l'avenir! :wink:

actuellement, je code en objet, et je teste les méthodes via SimpleTest, j'essaie d'être le plus systématique et le plus exhaustif possibles. En gros, pour chaque fonction, un ou plusieurs tests. Je prévois l'avenir et les modifications que ça va apporter: les tests que j'ai écrits seront toujours là, et devront toujours passer les tests, sinon ya un problème.

Les moteurs de template, j'évite. j'ai utilisé celui de phpbb, c'est sympa au début mais pas jouable si on des conditions. Un fichier html avec quelques echo fait largement l'affaire.

A+

Pascal

Eléphant du PHP | 254 Messages

05 mars 2006, 21:37

A l'époque à laquelle nous vivons, les entreprises ne se contentent plus vraiment d'une application fonctionnelle réalisée sur le pouce.
On ne cesse d'entendre l'éternel refrain : "ton code est-il maintenable ?"

Mais tout d'abord, à quoi ressemble du code PHP maintenable ?
Quels sont vos petits trucs pour avoir du code clair, propre, facile à débugger par vous-même ou par un autre développeur ?

Ces petits trucs peuvent être divers, ça peut toucher à la fois les norms de codage, les choix préférés pour le développement, les outils utilisés, etc.

Quelques exemples :
1- vos fichiers sont-ils un mix de HTML et de PHP ? du PHP pur avec le code HTML écrit à base de "echo" ? des fichiers HTML, du code PHP et un moteur de template au milieu ? autre chose encore ?

2- essayez-vous d'avoir du code ne dépassant pas 80 colonnes ? comment scindez-vous un appel de fonction qui est trop long ? et une requête SQL ?

3- faites-vous en sorte que le HTML généré soit indenté pour faciliter le debug ? comment procédez-vous ?

4- organisez-vous un fichier PHP "basique" en parties ?

5- utilisez-vous des fichiers ne contenant que des données figées ? en PHP ? en XML ? en texte ?

etc.


-beaucoup de commentaires expliquant le code .... j'ai lu dans ce fourm la signature d'un gars qui dit : pense a celui qui va maintenir ton code comme un psychopate qui connait ton adresse ... c'est bien vrai, faut surtout pas l'enerver :D

-la POO, ca peut sembler simpliste mais une bonne POO repose sur des methodes tres generiques ... tu peux ensuite modifier ce qu'il y a derriere sans avoir peur des repercussions sur le reste de ton appli !


1-eviter de melanger HTML/XHTML/PHP/JS/.... le coup des templates est + propre, c'est un avis perso car je connais un tres bon programmeur qui n'hesite pas a melanger.

2-la longueur du code n'a aucune importance, tu peux depasser les 80 colonnes meme s'il est + souvent + propre de mettre a la ligne les longues concatenations ou autre.
ex concat :
$stUrl = $this->stUrlDir.
      encUrl($GLOBALS['tr']->trGetWord('collection')).'/'.
      encUrl($GLOBALS['tr']->trGetWord('sexe'.$stSexe)).'/'.
      encUrl($GLOBALS['tr']->trGetWord($stSegmen)).'/'.
      encUrl($GLOBALS['tr']->trGetWord('menu1item'.$mxVal));
ex pour une requete MySQL :
$stColonne = 'col1, col2, col3, col4';
$stWhere = 'WHERE col1=50 AND col2=col3'
$stOrder = 'ORDER BY col1'
$stReq = "SELECT $stColonne from $stTable $stWhere $stOrder";
3-oui !
le code HTML que tu generes doit etre parfaitement propre, ca peut paraître un detail pour certain mais montre la maitrise du programmeur !

4-tu parles de bloc de code servant a faire foncitonner des parties distinctes ?
oui, bien sur.

5- :?: pas compris

Eléphant du PHP | 312 Messages

06 mars 2006, 13:01

1-eviter de melanger HTML/XHTML/PHP/JS/.... le coup des templates est + propre, c'est un avis perso car je connais un tres bon programmeur qui n'hesite pas a melanger.
Oui mais à la base, les templates sont là pour diviser l'aspect programmation de l'aspect graphisme par exemple pour permettre à un graphiste de ne pas avoir à se plonger dans du code qu'il ne comprend pas.
Pourtant on se retrouve vite confronté à des problèmes liés à la programmation. Certains moteurs de template ont adopté un langage évolué (côté template) pour résoudre ce problème mais on retombe alors petit à petit sur le problème du début : le code mélangé au template.
3-oui !
le code HTML que tu generes doit etre parfaitement propre, ca peut paraître un detail pour certain mais montre la maitrise du programmeur !
Sur ce point j'ai justement pas mal de soucis.
J'ai tendance, dans un souci de propreté, à coder l'intégralité de mes pages en php. C'est à dire qu'on trouve une balise <?php au début et une balise ?> à la fin.
Tout le code HTML de ma page (je n'utilise pas de moteur de template) est écrit à coup de echo.
Pourtant quand on affiche la page et qu'on regarde la source (en HTML donc), on se retrouve avec du code écrit sur une seule ligne. Vu que ça ne facilite pas le debug, mon code se transforme alors en quelque chose du genre :
echo "<HTML>\n";
echo "  <BODY>\n";
echo "    <HEAD>\n";
echo "    </HEAD>\n";
echo "  </BODY>\n";
echo "</HTML>\n";
Autrement dit : une gestion de l'indentation directement dans le code (ce qui est bien lourd) et le rajout de \n à la fin de chaque ligne (ou la nécessité de passer par une fonction perso qui le fait tout seul).
Bref, ça me plait pas du tout cette façon de procéder.
4-tu parles de bloc de code servant a faire foncitonner des parties distinctes ?
oui, bien sur.
Je parle de regroupement dans la page : récupérer toutes les variables POST ou GET au début, déclarer toutes les variables ensemble, mettre tous les include au début, etc... Ces cas sont les plus flagrants quand on veut un minimum de propreté dans son code mais il peut y en avoir d'autres.
5- :?: pas compris
Si ta page contient des données en dur, par exemple une liste déroulante, est-ce que vous préférez lister toutes les options à afficher directement dans le code ? au début du code dans un tableau ? dans un fichier php à part qu'on inclut ? dans un fichier XML à part ?

Par cette discussion, je souhaite surtout remettre en question ma façon de développer en php en regroupant les astuces de chacun : pourquoi estimez-vous que votre code est propre ? quels sont les contraintes que vous vous fixez pour accroître la propreté de votre code ?

Eléphant du PHP | 396 Messages

06 mars 2006, 14:09

[
echo "<HTML>\n";
echo "  <BODY>\n";
echo "    <HEAD>\n";
echo "    </HEAD>\n";
echo "  </BODY>\n";
echo "</HTML>\n";
Autrement dit : une gestion de l'indentation directement dans le code (ce qui est bien lourd) et le rajout de \n à la fin de chaque ligne (ou la nécessité de passer par une fonction perso qui le fait tout seul).
Bref, ça me plait pas du tout cette façon de procéder.
Pour avoir une indentation, tu peux faire comme ceci (ca reste lourd à gérer, mais un poil plus pratique que d'ajouter des espaces je trouve) :
echo "<HTML>\n";
echo "\t<BODY>\n";
echo "\t\t<HEAD>\n";
echo "\t\t</HEAD>\n";
echo "\t</BODY>\n";
echo "</HTML>\n";

Eléphant du PHP | 377 Messages

06 mars 2006, 14:25

Je ne vois pas pourquoi tu préfères garder le code html dans du php : le sortir te fait gagner du temps pour tout ce qui est fixe (genre <html><head> et toute la troupe...) mais en plus je crois que ça fait gagner du temps à l'interpréteur (quoique je ne sois pas sûr de ce que j'avance sur ce point... :roll: )
En tout cas tu peux toujours faire :
<?
while(condition) {
?>
<partie html fixe avec quelques <?=$variable ?> si besoin>
<?
}
?>
Je trouve ça non seulement plus rapide à écrire mais aussi plus propre, non?
;)
Modifié en dernier par Shrell le 06 mars 2006, 14:46, modifié 1 fois.
Petit scarabée deviendra grand

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

06 mars 2006, 14:38

Je soutiens Shrell à 100%
Non seulement, je trouve inutile de faire afficher des sections de code statique au serveur.
Ensuite, ne pas passer par du php permet d'indenter correctement le code HTML sans utiliser les carctères spéciaux PHP
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 312 Messages

06 mars 2006, 14:57

Je trouve pas spécialement propre d'avoir des balises php qui s'ouvrent et se ferment en permanence.
Par ailleurs même dans ce cas là, comme tu fais pour l'indentation ? tu as une indentation pour les lignes en PHP et une pour les lignes en HTML ? Une seule indentation qui gère les deux ?

Eléphant du PHP | 377 Messages

06 mars 2006, 15:13

euhhhh :oops: j'indente po :oops: 8-[
mais quand il me prend l'envie d'indenter j'ai en effet 2 indentations: celle du php et celle du html.
Mais de toutes façons ça ne pose pas de problème car dans l'absolu on devrait toujours partir du code HTML souhaité et y rajouter ENSUITE le php... (personnellement pour moi ça rime à de l'utopie, j'avoue le faire totalement à l'envers :oops: ). Donc si tu fais de cette façon là, ça ne devrait te poser aucun probleme :twisted:
Petit scarabée deviendra grand

Eléphant du PHP | 312 Messages

06 mars 2006, 15:20

Le problème c'est pas lors de la création de ton fichier : tu peux l'écrire sans aucune indentation ou avec un truc à l'arrache.

C'est plutôt quand tu (ou quelqu'un d'autre) dois te replonger dans ton fichier des mois plus tard et que tu tombes sur quelque chose avec du PHP et du HTML mélangé, des indentations un peu bizarres, etc.
J'ai choisi de tout écrire en PHP uniquement à cause de l'indentation des sources : je trouve que gérer le HTML et le PHP avec une seule indentation fait perdre l'intérêt de l'indentation. A l'inverse, utiliser deux indentations rend le code un peu illisible. Donc j'ai choisi de tout écrire en PHP pour ne pas avoir le choix et avoir une unique indentation.

En fait ce que je constate c'est qu'à moins de passer par un moteur de template, donc de ne pas avoir du tout de html dans le code php, un fichier php comprenant du html est systématiquement bordélique.

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

06 mars 2006, 15:26

...;
echo "chaine\n";
...;
étant strictement équivalent à
...;
?>chaine
<?php
...;
je trouve dommage de se priver de la seconde syntaxe :
- simplifier le travail du syntax-highlighting de son éditeur chéri
- manipuler de grosses portions d'html statiques sans se poser de question
- moins mélanger html et php (les portions d'html sont immédiatement identifiables)


Edit: j'm'ai fait griller, donc ça m'apprendra à lire jusqu'au bout.
Je vais donc parler de mon système de template, exemple :
MonScript.php
<?php

// contrôle

class Film {
  var $titre;
  var $auteur;
  function Film($titre,$auteur) {
    $this->titre = $titre;
    $this->auteur = $auteur;
  }
}

$titre = "mon titre";
$films = array(
  new Film("L'etrange noel de monsieur Jack", "Tim Burton"),
  new Film("Beetlejuice", "Tim Burton (he oui...)"),
  new Film("Edward aux mains d'argent", "Tim Burton (qui a dit que j'étais monomanique ?)")
);

// vue, modèle

include "MonModele.php";

?>
MonModele.php
<html>
<head>
  <title><?=$titre?></title>
</head>
<body>
  <h1><?=$titre?></h1>
  <table>
    <tr><th>Titre</th><th>Auteur</th></tr>
    <?foreach($films as $film):?>
    <tr><td><?=$film->titre?></td><td><?=$film->auteur?></td></tr>
    <?endforeach?>
  </table>
</body>
</html>
Sympa comme langage de template : le moteur est fiable, rapide, inclus en standard quelque soit le script, et la séparation code/présentation est respectée. Juste histoire de rappeler que faire du propre n'est pas une question de moteur, mais d'utilisation du langage ;)
Modifié en dernier par naholyr le 06 mars 2006, 15:45, modifié 1 fois.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

06 mars 2006, 15:34

J'utilise également 2 indentations séparées

Pour les sections où j'ai de gros échanges PHP/HTML, je saute des lignes, je met des séparateurs.

Je pense que tout n'est qu'organisation et habitude personnelle.

Pour reprendre ce que tu disais, Hermès, bien indenter ton code dès la création te permet d'éviter bien des erreurs d'accolade et de grandement faciliter le debuggage, même si tu viens de le créer ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 377 Messages

06 mars 2006, 15:35

un fichier php comprenant du html est systématiquement bordélique.
C'est vrai, j'approuve, surtout quand on y rajoute une once de javascript :
<input type="text" name="prix_max_bar" value="<? echo ($_POST[prix_max_bar])? $_POST[prix_max_bar] : "Prix max" ?>" onFocus="if(this.value=='Prix max') this.value='';" onBlur="if(this.value=='') this.value='Prix max';" size="7"> &euro;
C'est-y pas beau tout plein?
Mais comme le soulève naholyr, je préfère un fichier quelque peu bordélique mais avec une coloration syntaxique à peu près correcte plutot qu'un
echo "<option value="$r[id_secteur]">";
qui te dégage toute différenciation entre les éléments, les attributs, les valeurs et les variables php... et en plus il faut échapper toutes les quotes, génial :evil: ...
Petit scarabée deviendra grand

Eléphant du PHP | 312 Messages

06 mars 2006, 15:39

Avec le javascript ça devient horrible.

Pour l'échappement, il suffit d'un peu de rigueur pour que ça ne pose pas de problème.
Mon code est rempli de truc du genre :
echo "<OPTION value='".$valeur."'>".$description."</OPTION>";
Mais en effet, ça fait sauter la coloration de l'éditeur pour le html...