Organisation du code la syntaxe pour déclarer une fonction

Organisation du code

$a = 2; $b = double($a); print(« le double de $a est $b »); // affiche : « le double de 2 est 4 » Écrivons notre propre version de la fonction de calcul de puissance : pow(). Vous ne pouvez pas l’appeler pow() car il est interdit d’utiliser le nom d’une fonction déjà existante. Nommons-la puissance : function puissance($n,$p) { $resultat = $n; $i = 1; while ($i < $p) { $resultat *= $n; $i++; } return $resultat; } print(puissance(2,4)); // affiche comme prévu 16 Étudions maintenant un exemple dans lequel les fonctions rendent un véritable service. Le script suivant permet à un comptable de calculer le bonus de deux commerciaux selon une formule assez complexe : si le CA est supérieur à 300 : bonus = (CA + 100) / 8.4 sinon bonus = (CA + 80) / 7.6 $ca_marcel = 350; $ca_julien = 150; if ($ca_marcel > 300) $bonus_marcel = ($ca_marcel + 100) / 8.4; else $bonus_marcel = ($ca_marcel + 80) / 7.6; print(« Bonus de Marcel : « .$bonus_marcel. »« ); if ($ca_julien > 300) $bonus_julien = ($ca_julien + 100) / 8.4; else $bonus_julien = ($ca_julien + 80) / 7.6; print(« Bonus de Julien : « .$bonus_julien. »« ); Organisation du code Chapitre 3 LE GUIDE COMPLET 101 Première remarque à la vue de ce code : vous avez écrit deux fois le même extrait de code : if ($ca > 300) $bonus = ($ca + 100) / 8.4; else $bonus = ($ca + 80) / 7.6; C’est doublement regrettable ! Tout d’abord, il est extrêmement fastidieux de taper du code (nous sommes tous d’accord sur ce point) et il est donc inutile de perdre son temps à écrire plusieurs fois la même chose. Imaginez ensuite que vous vouliez modifier le taux 8,4 par 8,3. Il vous faudra non seulement le faire à différents endroits, mais, qui plus est, il conviendra de n’oublier aucune mise à jour. C’est précisément pour éviter ces difficultés qu’il est bon de créer la fonction calc_bonus() qui calcule le bonus d’un commercial en fonction de son CA : function calc_bonus($prenom,$ca) { if ($ca > 300) $bonus = ($ca + 100) / 8.4; else $bonus = ($ca + 80) / 7.6; print(« Bonus de « .$prenom. » : « .$bonus. »« ); return $bonus; } Le code devient donc : function calc_bonus($prenom,$ca) { if ($ca > 300) $bonus = ($ca + 100) / 8.4; else $bonus = ($ca + 80) / 7.6; print(« Bonus de « .$prenom. » : « .$bonus. »« ); return $bonus; } calc_bonus(« marcel »,350); calc_bonus(« julien »,150); Cette modification a aussi permis de rendre plus clair et plus lisible votre code, ce qui n’est pas négligeable.

Valeurs par défaut

Nous avons vu que la syntaxe pour déclarer une fonction est la suivante : function nom_fonction($param1,$parma2) { bloc_de_code; } Il est possible de donner des valeurs par défaut aux paramètres de la fonction en la déclarant ainsi : function nom_fonction($param1 = « valeur_par_défaut ») { bloc_de_code; } Écrivez une fonction affiche_retour() et appelez-la de deux façons différentes : retour« ; } // version 1 : nous utilisons le paramètre par défaut echo « merci de votre visite« ; affiche_retour(); //version 2 : nous passons la valeur du paramètre echo « merci de votre visite« ; affiche_retour(« / »); ?> Attention, si la fonction possède plusieurs paramètres, seul le dernier pourra prendre une valeur par défaut ! retour« ; } //version 2 : valeur par défaut pour le deuxième paramètre echo « merci de votre visite« ; affiche_retour(« / »); Organisation du code Chapitre 3 LE GUIDE COMPLET 103 //version 2 : nous passons les valeurs des 2 paramètres echo « merci de votre visite« ; affiche_retour(« / », »back »); ?>

Récursivité

La factorielle de la valeur 5 se calcule ainsi : facto(5)=5*4*3*2*1 Une définition possible de facto(n) est la suivante : facto(n) = n * n-1 * n-2 * … * 3 * 2 * 1 Il est aussi possible de donner une définition récursive de la fonction factorielle : facto(n)=n* facto(n-1) avec facto(1) = 1 En effet, prenez n=5 et développez : facto(5)=5* facto(4) facto(4)=4* facto(3) facto(3)=3* facto(2) facto(2)=2* facto(1) facto(1) = 1 (d’après la définition) Si vous remontez maintenant avec tous vos résultats intermédiaires, vous obtenez : facto(2)=2*1 facto(3)=3*2*1 facto(4)=4*3*2*1 facto(5)=5*4*3*2*1 Vous parvenez donc bien au résultat escompté. Cette technique de programmation, où une fonction se rappelle elle-même, s’appelle la « récursivité ». Il est possible en PHP d’utiliser cette technique. Écrivez la fonction factorielle tout d’abord classiquement : function facto($n) { for ($resultat = 1; $n > 1; $n–) { $resultat *= $n; } return $resultat; } print(facto(5)); 104 LE GUIDE COMPLET Chapitre 3 Les fondamentaux Boucle for Vous pouvez vous apercevoir que l’indice $n diminue au sein de la boucle : $n−−. Écrivez maintenant la version récursive de la même manière que la formule récursive vue précédemment : function facto($n) { if ($n == 1) return 1; else return $n * facto($n-1); } print(facto(5)); En appelant facto(5), la fonction va se rappeler elle-même jusqu’à facto(1), où elle va retourner la valeur 1. À partir de là, elle va faire le chemin inverse et remonter avec les valeurs intermédiaires. Modifiez un peu le programme afin qu’il affiche les étapes intermédiaires : « ; if ($n == 1) { print « facto1=1« ; return 1; } else { $r = $n * facto($n-1); print « > $r« ; return $r; } } $n = 5; print(« factorielle de $n= ». facto($n)); ?>

Formation et coursTélécharger le document complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *