[Plan du site]
Vous êtes ici ---
> Le Site du Zéro
> Les tutoriels
> Officiels
> Site Web
> Un site dynamique avec PHP ! > Annexes > Codez proprement
> Lecture du tutoriel
Codez proprement
En programmation comme partout ailleurs, il y a 2 types de personnes :
- Ceux qui effectuent leur travail rapidement, mais ne se soucient pas de la qualité, de la lisibilité, et de l'évolutivité de leur code.
- Ceux qui prennent le courage de soigner un peu leur travail, car ils ont conscience que ce petit travail supplémentaire sera un gain de temps énorme à l'avenir.
Il va de soi que le 2ème type de personne est de loin le meilleur

Toutefois, quand on débute, on a tendance à se dire "Ca marche, parfait, ne touchons plus à rien et laissons comme ça". C'est un mauvais réflexe, et je ne serai pas le seul à vous le dire : n'importe quel programmeur PHP ayant un peu d'expérience vous dira pareil.
Cette annexe est en fait une suite de petits conseils
apparemment peu importants, sur lesquels je voudrais que
vous portiez toute votre attention.
C'est peu de choses, et c'est pourtant ce genre de chose qui fait la distinction entre un "bon" programmeur et euh... Un programmeur du Dimanche
J'ai pas mal insisté dessus dans les premiers TP du tutoriel PHP, et cette fois j'y reviens avec un peu plus d'explications.
Quand vous créez un script PHP, vous devez
inventer des noms. Les 2 éléments qui ont besoin que vous leur donniez un nom sont :
- Les variables
- Les fonctions
L'idée est simple : il faut que vous fassiez l'effort de choisir des noms de variables et de fonctions clairs et compréhensibles.
Par exemple, voici des mauvais noms de variables :
- $temp
- $skrkds
- $x
- $data
- $info
- $pass
Par exemple, $info : "info", oui mais info sur QUOI ?
C'est pourtant ça qui est crucial : savoir ce que contient une variable. Une variable contient toujours une info, c'est à vous de préciser laquelle.
Je ne vous parle même pas des variables "sans nom" : $temp, $tmp et compagnie. Ces noms sont à bannir absolument.
Mais à quoi ça peut servir de chercher un nom de variable clair ? Après tout, c'est mon code, c'est pour moi, je comprends très bien ce que je fais !
Faux.
Bien sûr que vous savez ce que vous faites (personne n'est dans votre esprit après tout :p). Et pourtant le problème peut apparaître dans 2 cas :
- Si vous donnez votre code PHP à un ami pour qu'il vous aide à un endroit où vous bloquez, ou pour qu'il continue votre code. Essayez par exemple de montrer votre code PHP sur les forums du site, vous verrez que si vous avez des noms pas clairs, vous aurez beaucoup moins de réponses parce qu'il aura été bien plus difficile de comprendre le fonctionnement de votre code !
- Un autre cas (sous-estimé), c'est celui où vous retouchez votre code plus tard. Je ne dis pas le lendemain (les idées sont encore fraîches), mais dans 3 mois, ou même dans 3 semaines. Croyez-en mon expérience : il m'est arrivé de devoir relire mon code source en me demandant "Mais qu'est-ce que j'ai bien pu vouloir faire là ?"
Passez ne serait-ce qu'une seconde de plus à réfléchir à des noms clairs. N'ayez pas peur de mettre des noms un peu longs, ce n'est pas une perte de temps,
bien au contraire.
Vous pouvez utiliser le symbole underscore "_" pour remplacer les espaces, qui sont je vous le rappelle, interdits dans les noms de variables et de fonctions.
Voici quelques exemples de noms de variables clairs :
- $ip_visiteur
- $pseudo_membre
- $date_news
- $mot_de_passe
- $forum_selectionne
Pour finir, et en espérant vous convaincre parce que croyez-moi c'est très important, voici le même code source en deux exemplaires :
- Le premier contient des noms courts et pas clairs, il est difficile de comprendre rapidement ce qu'il fait.
- Le deuxième contient des noms un peu plus longs, mais au moins on arrive de suite à savoir à quoi sert telle variable et telle fonction.
Ces 2 codes produisent exactement le même résultat, simplement l'un d'entre eux est beaucoup plus compréhensible que l'autre.
Je vous laisse deviner lequel
Des noms pas clairs
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | <?php
$mess_page = 20;
$ret = mysql_query('SELECT COUNT(*) AS nb FROM livre');
$data = mysql_fetch_array($ret);
$total = $data['nb'];
$nb_total = ceil($total / $mess_page);
echo 'Page : ';
for ($i = 1 ; $i <= $nb_total ; $i++)
{
echo '<a href="livre.php?page=' . $i . '">' . $i . '</a> ';
}
?>
|
Des noms beaucoup plus clairs
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | <?php
$nombreDeMessagesParPage = 20;
$retour = mysql_query('SELECT COUNT(*) AS nb_messages FROM livre');
$donnees = mysql_fetch_array($retour);
$totalDesMessages = $donnees['nb_messages'];
$nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);
echo 'Page : ';
for ($page_actuelle = 1 ; $page_actuelle <= $nombreDePages ; $page_actuelle++)
{
echo '<a href="livre.php?page=' . $page_actuelle . '">' . $page_actuelle . '</a> ';
}
?>
|
C'est fou comment des noms écrits correctement en français permettent d'y voir plus clair

Les plus perspicaces d'entre vous auront d'ailleurs reconnu un bout du TP "Livre d'or"
Je vais maintenant vous parler d'une chose très importante pour avoir un code clair et lisible : on appelle cela
l'indentation du code.
L'idée, c'est d'utiliser intelligemment les tabulations pour "décaler" certaines parties de votre code, afin de montrer plus clairement la structure.
La quasi-totalité des éditeurs de texte ont l'habitude que vous utilisiez du code indenté, et vous aident donc pas mal à clarifier votre code.
Quand je dis "la plupart", je ne parle pas de Bloc-notes. Si vous tapez votre code PHP sous bloc-notes, vous feriez bien d'essayer un vrai logiciel fait pour ça, comme Notepad++ dont je vous ai parlé dans le premier chapitre.
Non seulement avec un vrai éditeur vous avez une indentation du code semi-automatique, mais en plus votre code est coloré tout seul, ce qui aide énormément croyez-moi !
Le principe à suivre pour indenter votre code est le suivant :
- A chaque fois que vous ouvrez des accolades "{", par exemple pour "if", un "while", un "for", une fonction etc... Vous décalez tout le code qui suit d'une tabulation vers la droite.
- A chaque fois que vous fermez une accolade "}", vous décalez tout le code qui suit d'une tabulation vers la gauche.
C'est plus clair avec un exemple, alors voyez-vous même. Voici ce que ça donne avec un code pas indenté :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14 | <?php
for ($ligne = 1 ; $ligne <= 100 ; $ligne++)
{
if ($ligne % 2 == 0)
{
echo $ligne . ' : <strong>ligne paire</strong>';
}
else
{
echo $ligne . ' : <em>ligne impaire</em>';
}
echo '<br />';
}
?>
|
Et voici maintenant le même code correctement indenté si on respecte la règle des tabulations :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | <?php
for ($ligne = 1 ; $ligne <= 100 ; $ligne++)
{
if ($ligne % 2 == 0)
{
echo $ligne . ' : <strong>ligne paire</strong>';
}
else
{
echo $ligne . ' : <em>ligne impaire</em>';
}
echo '<br />';
}
?>
|
L'avantage avec un code indenté, c'est qu'on voit bien les "niveaux" des instructions. On sépare bien les blocs, et on arrive à se repérer bien plus facilement

Avoir un code correctement indenté, c'est quasiment indispensable lorsque vous commencez à faire des scripts de plusieurs dizaines de lignes (ce qui arrive assez vite quand on fait du PHP !).
Le dernier point, peut-être le plus délicat pour des raisons de dosage, concerne les commentaires dans le code.
Les commentaires ne servent à rien, puisqu'ils ne sont pas lus par PHP lors de la génération de la page... Comme les noms de variables et l'indentation du code me direz-vous.
En effet, là encore les commentaires sont pour vous, et éventuellement pour la personne qui lira votre code. Il
faut commenter votre code, mais il ne faut surtout pas tomber dans l'excès !
Je m'explique. Si après une ligne comme celle-ci :
echo $pseudo_visiteur;
... vous rajoutez le commentaire "Affiche le pseudo du visiteur", là je dis Non non et non !
Il est
strictement inutile de commenter chaque ligne de votre code une à une ! Si j'ai insisté tout à l'heure pour que vous mettiez des noms de variables et de fonctions clairs, c'est justement pour vous éviter à avoir besoin de trop commenter.
Le plus judicieux et le plus intelligent, c'est de commenter un "groupe de lignes", pour expliquer brièvement à quoi elles servent.
C'est le
sens général de votre code que vous devez expliquer dans les commentaires, et non pas la fonction de chaque ligne !
Pour vous aider, il existe 2 types de commentaires :
- Ceux qui commencent par "//" : ils permettent de commenter sur une seule ligne à la fois.
- Ceux qui commencent par "/*" et qui se terminent par "*/" : ils sont utilisés pour des longs commentaires s'étalant sur plusieurs lignes.
Voici une petite illustration d'un code correctement commenté :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 | <?php
/*
Script "Questionnaire de satisfaction"
Par M@teo21
Dernière modification : 20 Août 2004
*/
// On vérifie d'abord s'il n'y a pas de champ vide
if ($_POST['description'] == NULL OR $_POST['mail'] == NULL)
{
echo 'Tous les champs ne sont pas remplis !';
}
else // Si c'est bon, on enregistre les informations dans la base
{
mysql_query('INSERT INTO enquete VALUES ('', '' . nl2br(htmlentities($_POST['description'])) . '', '' . htmlentities($_POST['mail']) . '')');
// Puis on upload les photos
for ($numero = 1 ; $numero <= 3 ; $numero++)
{
if ($_FILES['photo' . $numero]['error'] == 0)
{
if ($_FILES['photo' . $numero]['size'] < 500000)
{
move_uploaded_file($_FILES['photo' . $numero]['tmp_name'], $numero . '.jpg');
}
else
{
echo 'La photo ' . $numero . 'n\'est pas valide.<br />';
$probleme = true;
}
}
}
// Enfin, affichage d'un message de confirmation si tout s'est bien passé
if (!(isset($probleme)))
{
echo 'Merci ! Les informations ont été correctement enregistrées !';
}
}
?>
|
Comme vous le voyez, je n'ai pas commenté toutes les lignes. J'ai juste commenté des groupes de lignes pour expliquer leur fonction globale, ce qui me permettra à moi (ou à un autre) de se repérer beaucoup plus facilement dans le code plus tard !
Ces petits conseils n'ont l'air de rien comme ça, mais ils valent de l'or
Alors certes, je ne vous cache pas que chaque programmeur a ses petites habitudes et la façon de faire n'est pas partout la même. Pourtant, ces conseils constitueront pour vous un bon point de départ pour que vous preniez les bonnes habitudes.
En faisant l'effort de les respecter, vous gagnerez beaucoup plus que ce que vous ne le pensez. Et vous verrez que, le jour où vous devrez débugger un gros code qui a décidé de ne plus marcher, vous serez vraiment heureux d'avoir indenté, commenté et utilisé des noms clairs dans votre code