310 likes | 456 Vues
Les Fonctions. Définir une fonction. Sections de code indépendantes que l’on peut appeler à n’importe quel moment et dans n’importe quel ordre. Bout de code que l’on peut insérer comme s’il s’agissait de petit programme indépendant Moins de code à écrire, moins à vérifier
E N D
Définir une fonction • Sections de code indépendantes que l’on peut appeler à n’importe quel moment et dans n’importe quel ordre. • Bout de code que l’on peut insérer comme s’il s’agissait de petit programme indépendant • Moins de code à écrire, moins à vérifier • Mieux penser la structure du programme Définir une fonction : • lui donner un nom : mot clé « function » suivi du nom que l’on veut donner à la fonction • les paramètres sont listés entre parenthèses function nomfonction (paramètres) { Le code de la fonction est inséré ici…. }
Définir une fonction (suite) • La fonction peut contenir autant de ligne de code que l’on souhaite • Pour renvoyer une valeur, placer « return » sur la dernière ligne de la fonction montre que l’on a fini et que la fonction s’arrête là. • Pour afficher la valeur renvoyée par la fonction, on utilise l’instruction « echo ». « Return » n’affiche pas la valeur, mais transmet le résultat à la fonction • Une fonction peut être appelée aussi souvent qu’on le souhaite. Ex : $Prix = 1600 ; echo (reduction($Prix)) ; • si on veut donner plusieurs paramètres à une fonction, les séparer par une virgule Ex : function reduction ($Prix, $Reduction) { $Prix = $Prix – $Reduction ; Return $Prix ; } dans ce cas, pour appeler la fonction, on doit faire appel à deux valeurs Cf. Ex1
Ordre des éléments au sein d’une fonction • La position de la définition de la fonction, de son exécution et de son appel peut varier. • Cependant, la fonction n’est pas utilisée tant qu’elle n’est pas appelée dans la dernière ligne avec « echo ». Ex:
Noms des variables On est pas obligé de donner aux variables hors de la fonction le même nom que celui des paramètres. Ex : $Blabla = 1600 ; $Lalala = 500 ; echo (reduction($blabla, $Lalala) function reduction ($Prix, $Reduction) { $Prix = $Prix – $Reduction ; return $Prix ; } Dans ce cas-ci, la variable utilisée comme paramètre $Prix prend la valeur de $Blabla et la variable $Reduction, celle de la variable $Lalala.
Autres applications ou méthodes Hormis la méthode de transmission de valeur qui vient de vous être présentée, il existe également une méthode qui permet de passer les arguments de fonctions « par référence », mais nous ne la verrons pas ici.
Introduction Les structures de contrôle (boucles) permettent d’effectuer des tâches répétitives. Cependant, ce ne sont pas des structures conditionnelles dans la mesure où elles peuvent être exécutées indéfiniment. Pour résumer en deux mots le fonctionnement d’une boucle, nous dirons qu’elle fonctionne ainsi: • Une condition est testée et le code de la boucle est exécuté, si la condition est satisfaite. • Ensuite, la condition est retestée et si elle est toujours « true », elle est re-exécutée. • Et ainsi de suite. Chaque passage de la boucle est appelée une itération. Il existe plusieurs types de boucles, chacun adapté à une situation différente. Nous allons les passer en revue ici: • La boucle while • La boucle do while • La boucle for • La boucle foreach (que nous verrons dans le chapitre des tableaux)
La boucle while La boucle while est la plus simple des boucles. Elle présente des ressemblances avec l’instruction « if » La boucle while vérifie le résultat d’une condition. Selon que la condition est « true » ou « false », la portion de code placée entre accolades (après l’instruction conditionnelle) est exécutée. while (la condition est « true ») { Exécuter le contenu des accolades } Une fois le contenu entre accolades exécuté, la condition située juste au dessus est revérifiée. • Dans le cas où c’est à nouveau « true », le contenu de l’accolade est ré-exécuté. • Dans le cas où la condition est « false », le code entre accolades est ignoré et l’on passe directement à la première ligne de code qui suit les accolades. • Exemple sur les mensualités ( compris) • Boucles infinies ?
La boucle do while La boucle do while est environ similaire à la boucle « while » si ce n’est que l’instruction conditionnelle est testée à la fin de la boucle et non au début. Cela implique donc que le contenu des accolades sera appliqué au moins une fois, même si la condition est « false » Ex : do { Exécuter le contenu des accolades } while (la condition est « true ») ; retourner et recommencer ou do { Exécuter le contenu des accolades } while (la condition est « false ») ; sortir de la boucle et passer à la ligne de code suivante • Exemple des nombres premiers Cf. Ex while.php
La boucle for La boucle for est idéale pour répéter une section de code un certain nombre de fois Elle offre la possibilité de spécifier le nombre de fois que l’on souhaite parcourir la boucle. Cette boucle est plus complexe que la boucle « while » Ex : for (définir le compteur de boucles ; tester le compteur de boucles ; ajouter ou soustraire au compteur) { exécuter le contenu des accolades } Le concept de compteur de boucles est introduit ici. Ex : for ($compteur=1 ; $compteur<=10 ; $compteur++) { echo « Mon nom est Bob ! » ; } La boucle for va : • compter combien de fois la boucle a été parcourue = itérations • puis finir la boucle une fois le nombre défini dépassé. • S’assurer que la valeur du compteur se modifie à chaque itération, d’où l’apparition de « ++ » qui représente l’incrémentation du compteur Cf. Ex for.php
Structures de données Arrays simples et indexés
Introduction Les tableaux sont constitués de variables d’indice qui, surtout si elles sont associées à une boucle, peuvent être très efficace. • Un tableau est composé d’une série de variables qui ont toutes le même nom • Chacune de ces variables ayant un indice différent • Chaque constituant d’un tableau est appelé « élément » • On peut créer des tableaux de la même façon qu’on crée des variables, tant que l’on oublie pas de mettre des crochets pour signaler l’indice. Ex : $ PaysEurope[1] = « France » ; $ PaysEurope[2] = « Espagne » ; L’ordre des n° n’est pas important et l’on peut même utiliser des caractères Ex : $ PaysEurope[« F »] = « France » ; $ PaysEurope[« E »] = « Espagne » ; $ PaysEurope[« Ch »] = « Suisse » ; On peut également attribuer des valeurs mélangées aux indices des tableaux, à savoir valeur numériques ou caractères.
Initialisation L’initialisation est la définition des valeurs initiales des variables des tableaux $Pays[] = « France » $Pays[] = « Suisse » • Sans les crochets, la valeur de la première variable serait automatiquement remplacée par la seconde dans la suite du programme. • L’absence de valeur d’indice fait que PHP va décider lui-même de stocker les valeurs dans $Pays[0] et $Pays[1]. • Pas besoin de prédéfinir les types de données du tableau en indiquant s’il s’agit de données textuelles ou numériques. • Pas besoin de spécifier la taille du tableau avant de le créer
La construction « array » $Pays = array (« France », « Espagne », « Suisse ») ; • PHP génère automatiquement les valeurs d’indice. Elles commencent à zéro. Les nouvelles valeurs sont insérées dans un élément vide avec la valeur d’indice la plus petite. Ex : echo $Pays[2] ; afficherait « Suisse » Ex: $PaysEurope = array (1 => " France ", " Espagne ", " Suisse ", "Hollande", "Belgique", "Portugal", "Angleterre", "Danemark", "Allemagne", "Italie") ; Cf. Ex pays.php
Les itérations dans un tableau Les boucles sont utilisées dans les tableaux, afin d’éviter un travail laborieux qui consisterait à récupérer individuellement chaque élément du tableau afin de l’afficher par exemple. La boucle for : Exemple afficher tous les pays recensés dans notre tableau : for ($compteur=1 ; $compteur<11 ; $compteur++) { echo « <BR>$Pays[$compteur] » ; } Commencer à 1 et aller jusqu’à 10, en augmentant à chaque fois le compteur de 1. Cela donnerait : echo « <BR>$Pays[1] » ; echo « <BR>$Pays[2] » ; echo « <BR>$Pays[3] » ; echo « <BR>$Pays[4] » ; echo « <BR>$Pays[5] » ; echo « <BR>$Pays[6] » ; echo « <BR>$Pays[7] » ; echo « <BR>$Pays[8] » ; echo « <BR>$Pays[9] » ; echo « <BR>$Pays[10] » ; Cf. Ex pays.php
Les itérations dans un tableau (suite) Les boucles while ou do while : Ces boucles nous obligent à définir un compteur nous-mêmes $compteur=1; while ($compteur<11) { echo « <BR>$Pays[$compteur] » ; $compteur=$compteur+1 ; } Le résultat sera semblable à l’exemple précédent. Cf. Ex pays_while.php
La boucle foreach Cette boucle est utilisée lorsque nous avons un tableau avec un nombre d’éléments inconnu. Elle effectue des itérations jusqu’à la fin du tableau Pour chaque élément du tableau, on effectue une itération à travers la boucle foreach. foreach ($PaysEurope As $IndicePays => $Pays) { echo "<BR>$IndicePays - $Pays "; } $EtatsUnis = nom du tableau $IndiceEtat = nom de variables que l’on crée nous-mêmes qui contient les valeurs d’indice. $Etat = nom de variables que l’on crée nous-mêmes qui contient l’élément correspondant L’avantage de cette boucle est que nous n’avons pas besoin d’effectuer le décompte du nombre d’éléments du tableau, puisqu’elle la découvre toute seule. En ajoutant un nouvel élément qui ne suit pas les élément déjà présents dans le tableau, la boucle va le prendre en compte et l’afficher, sans avoir à vérifier les éléments vides présents entre. Cf. Ex foreach.php
Exemple • Exemple sur le programme Attention : comme c’est PHP qui a rempli le tableau. Les éléments sont donc stockés de 0 à 9. Les tableaux $PaysMasque et $CapitalesPays ont à présent des indices correspondants. Une boucle va nous permettre d’aller de l’indice 0 à 9. for ($compteur=0; $compteur<50; $compteur++) { if( $PaysMasque[$compteur]==$Pays { echo » La capitale de ce pays d’Europe est $CapitalesPays[$compteur] » ; } } En gros, pour résumer : si $PaysMasque = au Pays sélectionné par l’utilisateur, la valeur d’indice peut être récupérée pour récupérer la capitale correspondant dans $CapitalesPays. Si ce n’est pas le cas, la boucle « for » poursuit ses itérations jusqu’à ce qu’il y ait correspondance. • Tableau associatif (p.182) ?? à faire ou pas ??
Les tableaux non-séquentiels Fonctions current() et key() Ces fonctions sont des pointeurs pour conserver la trace d’un élément donné lors des déplacements dans un tableau. La fonction current() permet de voir quel élément est en train d’être utilisé par PHP La fonction key() permet de rechercher la valeur d’indice affectée à l’élément key est synonyme «d’ indice » ici. Ex : $ValeurIndiceCourant = key($Realisateur) ; echo ($ValeurIndiceCourant) ; renvoie la valeur d’indice du 1er élément placé dans le tableau $ContenuCourant = current($Realisateur) ; echo ($ContenuCourant) ; renvoie la valeur du premier élément. Ajout de ligne ??
Les tableaux non-séquentiels (suite) Fonctions next() et prev() Ces deux fonctions permettent de naviguer au sein des tableaux, ainsi que de trouver la valeur d’un nouvel élément ajouté au tableau. Ex : • Pour résumer: • Pour naviguer dans le tableau, nous utilisons les fonctions next() et prev() • Pour afficher la position courrante, les fonctions current() et key()
Les tableaux non-séquentiels (suite) Fonctions list() et each() +itération Les fonctions list() et each() permettent de renvoyer uniquement les éléments du tableau contenant des données, au lieu de passer des données vides qui peuvent être nombreuses. Exemple La fonction list() renvoie d’abord la valeur de l’indice, puis le contenu de l’élément. Et each() ??
Array functions Pour découvrir les array fonctions,cf. http://tecfa.unige.ch/guides/php/php5_fr/ref.array.html Trier les tableaux Il y a plusieurs fonctions de tri de tableau. Passons-en en revue cinq ici. • Fonction sort() Fonction qui trie les éléments d’un tableau par ordre alphabétique : sort(NomTableau) • Fonction asort() Fonction qui trie les éléments d’un tableau par ordre alphabétique, mais en conservant les indices de chaîne : asort(NomTableau) • Fonctionrsort et arsort Tri inversé. Idem que les deux précédentes, mais par ordre décroissant. • Fonction ksort Trie le contenu d’un tableau associatif en fonction des indices de chaîne. Le principe est le même que pour les autres indices de tri.
Exemples d’array functions (suite) • Fonctions array_push() et array_pop() Permettent d’ajouter ou de supprimer un élément à un tableau : Ex : a) array_push($Pays, « Italie », « Suède ») ; ajoute ces deux pays b) $Pays [2] = « Suisse » ; $Pays [1] = « France » ; $Pays [8] = « Espagne » ; $Pays [10] = « Angletterre » ; array_pop($Pays) ; supprime le dernier élément ajouté au tableau (ici « Angleterre »). Mais cette fonction ne supprime qu’un élément à la fois. • Fonctions Implode et Explode Fonctions qui permettent de stocker tout le contenu d’un tableau en tant que chaîne ou l’inverse. Implode concatène les éléments d’un tableau et crée une chaîne séparée par un délimiteur. $NomChaine = implode (« délimiteur », $NomTableau) ; Ex : $Pays_separes = implode (« - », $Pays) ; echo ($Pays_separes) ; Cela va donner : Suisse-France-etc Explode produit l’inverse, c’est-à-dire qu’elle sépare les éléments de la chaîne.
Les tableaux multidimensionnels Nous n’en parlerons pas ici. Les tableaux multidimentionnels sont des tableaux de tableau. Ex: NomTableau = array (indice => array (Contenu du tableau)) Ex : annuaire téléphonique L’indice serait « Jessica Claude » et le contenu (« 10 ch. Rieu », 022/----- )»
La portée des variables Les variables locales et globales
Variables locales vs globales Les variables à l’intérieur d’une fonction ont une portée locale. Elle n’existent qu’à l’intérieur même d’une fonction et donc uniquement pour la durée d’appel de cette fonction. Les variables dont la durée de vie correspond à la durée de vie d’une page ont une portée globale. Illustration: <php? $MessageBienvenue = « Hello world »; VARIABLE GLOBALE Function traduire_message ( $MessageBienvenue) { $MessageFrançais = « Bonjour à tout le monde »; VARIABLE LOCALE return $MessageBienvenue; } traduire_message (); echo $MessageBienvenue; echo $MessageFrançais; ?>
Consignes Reprenez votre exercice STAF 14 de l’année passée et reproduisez-le à l’aide d’array, de boucles et de fonctions, comme nous venons de le voir.