COURS PHP

  Dernière mise à jour effectuée le : Dimanche 10 août 2003    

Accueil | Eléments de base du langage : Les fonctions

Les fonctions



Généralités

Comme nous l'avons déjà vu, un programme est une suite d'instructions que le serveur (par l'intermédiaire de l'interpréteur PHP) est chargé d'exécuter pour accomplir une tâche bien précise : ce que nous avons décidé de lui faire faire.
Une instruction, à elle seule, réalise rarement beaucoup de choses.
Elle affecte une valeur à une variable, elle peut effectuer des opérations élémentaires, opérer des choix en fonction de la valeur vrai ou faux d'une proposition ou d'une situation, mais si nous ne pouvions utiliser qu'une seule instruction, nous ne pourrions pas faire grand chose.
PHP, permet de regrouper plusieurs instructions (autant que l'on veut) dans ce que l'on appelle des "Fonctions".

Une fonction, devient alors un petit (ou gros) programme à lui seul, capable d'exécuter un groupe d'instructions qui,  agissant ensembles, réalisent une tâche plus ou moins complexe.

On peut, dans un premier temps, comparer une fonction à un bon petit employé (ouvrier ou cadre)  bien consciencieux, qui, dès qu'on l'appelle, se met à faire très exactement ce pour quoi il a été créé. Mais rien d'autre.

Nous aurons alors affaire à deux types de bons petits employés.

1) Ceux qui peuvent travailler sans qu'on leur donne quoi que ce soit de supplémentaire. Ils ont leurs propres outils, leurs propres données, et ils font ce qu'ils doivent faire tout seuls. Ils savent tout seuls aller chercher ce dont ils ont besoin là où on leur dit d'aller le chercher.

Par exemple :
Un ouvrier sur un chantier, chargé de transporter du sable dans une brouette, d'un tas de sable vers la bétonneuse.
Chaque fois qu'on le réveille, il va remplir sa brouette de sable et le transporte vers la bétonneuse. Il a tout ce qu'il faut. Sable, brouette, etc...

Traduit en terme de fonction, on dira que cette fonction est indépendante. Elle n'a besoin d'aucun paramètre (on dit aussi "Argument"), elle sait tout faire toute seule. Mais rien que ça, et rien d'autre. Inutile d'espérer qu'elle transporte autre chose que du sable, elle ne sait pas faire.

2) Ceux à qui il faut donner du grain à moudre.
Ceux-là ne savent que faire la tâche qu'on leur demande, mais il faut leur donner le matériau.

Par exemple :
Le collègue du premier ouvrier, mais il ne sait que porter quelque chose dans sa brouette d'un point à un autre.
Mais il n'a rien à transporter, et il ne sait pas d'où vers où. Il faut tout lui dire. Lui indiquer le point de départ, le point d'arrivée, et lui donner aussi le matériau à transporter.

Traduit en terme de fonction, on dira que pour agir efficacement, cette fonction a besoin qu'on lui transmette trois paramètres (ou "Argments"). Le point de départ, le point d'arrivée, le matériau à transporter. Si on oublie un seul des paramètres, tout va de travers.

 



Ecriture des fonctions

En PHP, une fonction aura la forme suivante :

function Nom_de_la_fonction (argument_1, argument_2) {

instruction_1;
instruction_2
;

instruction_3;

}

Le mot function est un mot réservé de PHP. Il indique à l'interpréteur PHP que tout ce qui suit est une fonction qui portera le nom Nom_de_la_fonction.

Nom_de_la_fonction, est le nom que le programmeur aura donné à sa fonction. Les contraintes de nommage des fonctions sont les mêmes que celles qui régissent les noms de variables. Là encore, il est raisonnable de donner aux fonctions des noms représentatifs des tâches qu'elles accomplissent.

(argument_1, argument_2) entre parenthèses, représentent les paramètres (arguments) que l'on doit transmettre à la fonction si celle-ci est programmée pour travailler à partir de paramètres transmis. Cas de l'ouvrier numéro deux des généralités. Les parenthèses sont obligatoires.
Si la fonction est prévue pour fonctionner toute seule, sans transmission de paramètre (cas de l'ouvrier numéro un des généralités), on laissera les parenthèses, mais en les collant l'une à l'autre : "()". Les deux parenthèses collées, "()", l'une ouvrante, l'autre fermante derrière le nom de la fonction, sont obligatoires.

L'accolade ouvrante "{" (obtenu en maintenant appuyé la touche "Alt Gr" du clavier et en appuyant sur la touche "4" en haut du clavier, pas sur le pavé numérique), signifie à l'interpréteur le début de la zone des instructions dans la fonction.
 
 
Cette accolade ouvrante, comme son homologue fermante en fin de fonction, sont ABSOLUMENT OBLIGATOIRES toutes les deux. Les omettre, planterait gravement le programme. Soyez très attentifs à ces petits détails... Ils peuvent vous gâcher la journée...

instruction_1;
instruction_2
;

instruction_3;
sont les instructions que le programmeur écrira pour que la fonction les exécutent lorsqu'on fera appel à elle.

L'accolade fermante "}" (obtenu en maintenant appuyé la touche "Alt Gr" du clavier et en appuyant sur la touche "+" en haut du clavier, pas sur le pavé numérique), signifie à l'interpréteur la fin de la fonction en question. Là encore, ne pas oublier de fermer la fonction par une accolade fermante. Sans quoi, bonjour les dégâts...

 



Emplacement des fonctions dans le programme

Dans le programme, les fonctions seront toujours entre les deux balises : "<?php" et "?>". Comme ci-dessous :
 

<?php

Emplacement des fonctions

?>

Si bien que notre squelette de page HTML avec fonctions PHP, prendra la forme suivante :

<html>

     <head>
     <title> .......... </title>

     <?php
     // déclaration des variables
    $MonPoids ;
    $monPrenom ;

    // début des fonctions
    function Nom_de_la_fonction (argument_1, argument_2) {

    instruction_1;
    instruction_2
;

    instruction_3;

    }

     ?>

     </head>

<body>

</body>
</html>
 
Le fait de mettre nos fonctions entre les balises HTML <head> et </head> veut simplement dire que ce sont des fonctions qui seront appelées lorsque nous en aurons bsoins. pour le moment, elles sont présentes, inactives, mais prêtes à se réveiller dès qu'on leur dira de faire quelque chose. C'est-à-dire dès que nous les appellerons dans un programme.
Nous aurions tout aussi bien pu les mettre entre les balises <body> et </body>. Ca n'aurait strictement rien changé.
En ce qui me concerne, j'ai pour habitude de mette les fonctions à exécution différée (come celle-ci) entre les balises HTML <head> et </head>. Privilégiant de mettre entre balises <body> et </body> les instructions devant s'ésécuter immédiatement lors de l'interprétation de la page par l'interpréteur PHP.
Ca marche parfaitement et je m'en suis toujours trouvé très bien.

 



Conseils

Vous avez remarqué que les fonctions s'ouvrent par "{" et se ferment par "}". Et aussi que c'est EXTREMEMENT IMPORTANT de ne pas les oublier. Alors à ce sujet, un bon conseil : dès que vous ouvrez une fonction en tapant "{", fermez-la immédiatement par "}" après avoir passé quelques lignes.
Ca vous évitera d'oublier de fermer vos accolades, ce qui est toujours désastreux. En plus, si vous êtes un peu soigneux, mettez des commentaires dans le genre :

function Nom_de_la_fonction (argument_1, argument_2) { // début de fonction

} // fin de fonction

Car si votre fonction comporte (comme c'est souvent le cas) plusieurs pages d'instructions, et que vous écriviez plusieurs fonctions à la suite les unes des autres (ce qui est aussi souvent le cas), vous aurez du mal à faire la différrence entre les accolades fermantes des tests, des boucles, ou des autres fonctions.
Mais bon ! C'est juste un petit conseil d'ami. Rien de plus...

 



Ce cours est enseigné par Philippe Médan 
dans le cadre de la formation des professionnels de l'INTERNET.
au CREFAC , 14 rue Scandicci, 93000 Pantin. Tél. : 01 48 46 51 99
au GITA-GRETA , Lycée Technologique Diderot 61, rue David D'Angers 75019 Paris Tél. : 01 40 40 36 27
au CESI à l'Ecole des ingénieurs, 116 Av Aristide Briand, BP 57, 92224 Bagneux CEDEX Tél. : 01 45 36 70 00

© Philippe Médan 1999-2003. Tous droits de reproduction réservés pour tous pays.