Les fonctions permettent de ne pas réécrire des lignes de code. Elles permettent une factorisation du code en même tant qu’une meilleur lisibilité.
Une fonction est :
- un ensemble d’instructions qui remplissent une certaine fonction et souvent renvoie un résultat.
- elle peut prendre des paramètres et donc s’adapter aux besoins
Remarques importantes :
- Une fonction est faite pour une certaine fonctionnalité. Si il y a deux choses à faire alors écrivez deux fonctions.
- Afin de pouvoir utiliser vos fonctions dans des conditions différentes la règle est de ne pas afficher des valeurs mais de les retourner.
Retourner une valeur
L’intérêt des fonctions également est qu’on peut les utiliser directement leur valeur de retour lors de tests ou pour une affectation.
[pastacode lang= »php » manual= »%3C%3Fphp%0A%20%20echo%20fixe_noms(%22WILLIAM%22%2C%20%22henry%22%2C%20%22gatES%22)%3B%0A%0A%20%20function%20fixe_noms(%24n1%2C%20%24n2%2C%20%24n3)%0A%20%20%7B%0A%20%20%20%20%24n1%20%3D%20ucfirst(strtolower(%24n1))%3B%0A%20%20%20%20%24n2%20%3D%20ucfirst(strtolower(%24n2))%3B%0A%20%20%20%20%24n3%20%3D%20ucfirst(strtolower(%24n3))%3B%0A%0A%20%20%20%20return%20%24n1%20.%20%22%20%22%20.%20%24n2%20.%20%22%20%22%20.%20%24n3%3B%0A%20%20%7D%0A%3F%3E » message= »exemple 5.1″ highlight= » » provider= »manual »/]
Autre possibilité :
[pastacode lang= »php » manual= »%3C%3Fphp%0A%20%20%24noms%20%3D%20fixe_noms(%22WILLIAM%22%2C%20%22henry%22%2C%20%22gatES%22)%3B%0A%20%20echo%20%24noms%5B0%5D%20.%20%22%20%22%20.%20%24noms%5B1%5D%20.%20%22%20%22%20.%20%24noms%5B2%5D%3B%0A%0A%20%20function%20fixe_noms(%24n1%2C%20%24n2%2C%20%24n3)%0A%20%20%7B%0A%20%20%20%20%24n1%20%3D%20ucfirst(strtolower(%24n1))%3B%0A%20%20%20%20%24n2%20%3D%20ucfirst(strtolower(%24n2))%3B%0A%20%20%20%20%24n3%20%3D%20ucfirst(strtolower(%24n3))%3B%0A%0A%20%20%20%20return%20array(%24n1%2C%20%24n2%2C%20%24n3)%3B%0A%20%20%7D%0A%3F%3E » message= »exemple 5.2″ highlight= » » provider= »manual »/]
Portée des variables
Variables locales:
- Les variables locales sont celles définis à l’intérieur d’une fonction.
- Elle n’est accessible que de là. Ailleurs elle n’existe pas.
- On dit que sa portée se limite à la fonction.
- De même une fonction ne peut accéder aux variables du programme hors mis les paramètres.
Dans l’exemple ci – dessous la tentative d’accéder à $temps depuis la fonction échoue lamentablement 😉
[pastacode lang= »php » manual= »%3C%3Fphp%0A%20%20%24temp%20%3D%20%22Nous%20sommes%20le%20%22%3B%0A%20%20echo%20longdate(time())%3B%0A%0A%20%20function%20longdate(%24timestamp)%0A%20%20%7B%0A%20%20%20%20return%20%24temp%20.%20date(%22j%20M%20Y%22%2C%20%24timestamp)%3B%0A%20%20%7D%0A%3F%3E » message= »exemple 5.3″ highlight= » » provider= »manual »/]
Pourquoi cela ? L’intérêt est de protéger votre code. En effet avec un programme de 20 000 lignes il y a des chances que vous ne sachiez plus qu’elles sont les variables déjà utilisées et vous pourriez modifier sans le vouloir une variable déjà initialisée. En ayant cette portée limité on travail en toute sécurité et je peux avoir 50 variables $i si celles-ci sont dans 50 fonctions différentes.
Si on revient à notre code précédent on peut le modifier comme ceci :
[pastacode lang= »php » manual= »%3C%3Fphp%0A%20%20%24temp%20%3D%20%22Nous%20sommes%20le%20%22%3B%0A%20%20echo%20longdate(%24temp%2C%20time())%3B%0A%0A%20%20function%20longdate(%24texte%2C%20%24timestamp)%0A%20%20%7B%0A%20%20%20%20return%20%24texte%20.%20date(%22j%20M%20Y%22%2C%20%24timestamp)%3B%0A%20%20%7D%0A%3F%3E » message= »exemple 5.4″ highlight= » » provider= »manual »/]
Variables globales:
On peut parfois mais vraiment avec parcimonie vouloir disposer de variable à portée globale ( visible de partout ).
Attention : Il faut vraiment limiter ce mécanisme à quelques variables précises lorsque c’est VRAIMENT nécessaire. Ne succombez pas à la facilité.
Exemple : global $is_logged;
[pastacode lang= »php » manual= »%3C%3Fphp%0A%20%20%24a1%20%3D%20%22WILLIAM%22%3B%0A%20%20%24a2%20%3D%20%22henry%22%3B%0A%20%20%24a3%20%3D%20%22gatES%22%3B%0A%0A%20%20echo%20%24a1%20.%20%22%20%22%20.%20%24a2%20.%20%22%20%22%20.%20%24a3%20.%20%22%3Cbr%3E%22%3B%0A%20%20fixe_noms()%3B%0A%20%20echo%20%24a1%20.%20%22%20%22%20.%20%24a2%20.%20%22%20%22%20.%20%24a3%3B%0A%20%20%0A%20%20function%20fixe_noms()%0A%20%20%7B%0A%20%20%20%20global%20%24a1%3B%20%24a1%20%3D%20ucfirst(strtolower(%24a1))%3B%0A%20%20%20%20global%20%24a2%3B%20%24a2%20%3D%20ucfirst(strtolower(%24a2))%3B%0A%20%20%20%20global%20%24a3%3B%20%24a3%20%3D%20ucfirst(strtolower(%24a3))%3B%0A%20%20%7D%0A%3F%3E » message= »exemple 5.5″ highlight= » » provider= »manual »/]
Variables statiques:
Une variable locale est visible que de la fonction mais sa valeur en plus disparait après l’execution de la fonction.
Il peut être utilise parfois de vouloir garder sa valeur pour par exemple incrémenter celle-ci.
Dans ce cas on la passera en variable statique.
Attention : celle-ci n’est toujours visible que de la fonction !
[pastacode lang= »php » manual= »%3C%3Fphp%0A%0A%20%20echo%20test()%3B%0A%20%20echo%20%22%3Cbr%3E%3Cbr%3E%22%3B%0A%20%20echo%20test()%3B%0A%20%20%20%20%0A%20%20function%20test()%0A%20%20%7B%0A%20%20%20%20static%20%24compteur%20%3D%200%3B%0A%20%20%20%20echo%20%24compteur%3B%0A%20%20%20%20%24compteur%2B%2B%3B%0A%20%20%7D%0A%3F%3E » message= »exemple 5.6″ highlight= » » provider= »manual »/]
Supports de cours :
EXERCICES
Exercice 5.1:
Ecrire une fonction traitement_chaine() qui prend une chaine de caractères en paramètre et retourne la même chaine mais en minuscule sauf la première lettre en majuscule.
Tester cette fonction.
Exercice 5.2:
Ecrire une fonction ajoute_camion() qui incrément un nombre de camion. Si on lui passe le paramètre ‘affiche’ elle affiche le nombre de camion créé. Si on lui passe ‘reset’ ne nombre de camion se remet à 0.
Correction
[pastacode lang= »php » manual= »%3C%3Fphp%0A%20%20function%20traitement_chaine(%24chaine)%0A%20%20%7B%0A%20%20%09return%20ucfirst(strtolower(%24chaine))%3B%0A%20%20%7D%0A%20%20echo%20traitement_chaine(%22sAlUt%20LES%20copains%20!%20%3Cbr%3E%22)%3B%0A%0A%20%20function%20ajoute_camion(%24mode%3D »)%0A%20%20%7B%0A%20%20%09static%20%24nb%3D0%3B%0A%20%20%09%24nb%2B%2B%3B%0A%0A%20%20%09if%20(%24mode%20%3D%3D%20’affiche’)%0A%20%20%09%7B%0A%20%20%09%09echo%20%22Le%20nombre%20de%20camion%20est%20%24nb%20%3Cbr%3E%22%3B%0A%20%20%09%7D%0A%0A%20%20%09if%20(%24mode%20%3D%3D%20’reset’)%0A%20%20%09%7B%0A%20%20%09%09%24nb%20%3D%200%3B%20%2F%2F%20remise%20%C3%A0%200%0A%20%20%09%09echo%20%22Le%20nombre%20de%20camion%20est%20%24nb%20%3Cbr%3E%22%3B%0A%20%20%09%7D%0A%20%20%7D%0A%0A%20%20ajoute_camion()%3B%0A%20%20ajoute_camion()%3B%0A%20%20ajoute_camion(‘affiche’)%3B%0A%20%20ajoute_camion(‘reset’)%3B%0A%3F%3E » message= »correction 5.2 & 5.3″ highlight= » » provider= »manual »/]
Ce contenu est réservé aux membres du site. Si vous êtes un utilisateur existant, veuillez vous connecter. Les nouveaux utilisateurs peuvent s'inscrire ci-dessous.
