Introduction à la programmation I Fonctions Structures de contrôle Structures de données (arrays simples et indexés) Variables locales et globales
Les Fonctions
Définir une fonction Sections de code indépendantes que lon peut appeler à nimporte quel moment et dans nimporte quel ordre. Bout de code que lon peut insérer comme sil sagissait 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 lon 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 lon souhaite Pour renvoyer une valeur, placer « return » sur la dernière ligne de la fonction montre que lon a fini et que la fonction sarrête là. Pour afficher la valeur renvoyée par la fonction, on utilise linstruction « echo ». « Return » naffiche pas la valeur, mais transmet le résultat à la fonction Une fonction peut être appelée aussi souvent quon 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 dune fonction La position de la définition de la fonction, de son exécution et de son appel peut varier. Cependant, la fonction nest pas utilisée tant quelle nest pas appelée dans la dernière ligne avec « echo ». Ex: <?php $Salaire=1600; Lexécution commence ici $TauxCharges=25; echo (charges($Salaire, $TauxCharges)); La fonction est appelée ici function charges($Salaire, $TauxCharges) La fonction est définie ici { $Salaire = $Salaire – (($Salaire/100)*$TauxCharges); return; } ?> <?php function charges($Salaire, $TauxCharges) La fonction est définie ici { $Salaire = $Salaire – (($Salaire/100)*$TauxCharges); return; } $Salaire=1600; Lexécution commence ici $TauxCharges=25; echo (charges($Salaire, $TauxCharges)); La fonction est appelée ici ?>
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. Faire des essais : - créer une fonction en utilisant les éléments décrits plus haut - modifier la position des éléments
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 », cest-à-dire qui implique que la valeur passée soit modifiée à lintérieur de la fonction. Mais nous ne la verrons pas ici.
Structures de contrôle
Introduction Les structures de contrôle (boucles) permettent deffectuer 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 dune boucle, nous dirons quelle 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 linstruction « if » La boucle while vérifie le résultat dune condition. Selon que la condition est « true » ou « false », la portion de code placée entre accolades (après linstruction 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ù cest à nouveau « true », le contenu de laccolade est ré-exécuté. Dans le cas où la condition est « false », le code entre accolades est ignoré et lon passe directement à la première ligne de code qui suit les accolades.
La boucle do while La boucle do while est environ similaire à la boucle « while » si ce nest que linstruction 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 Cf. Exemple des nombres premiers Cf. Ex verifier_do_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 lon 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é. - sassurer que la valeur du compteur se modifie à chaque itération, doù lapparition de « ++ » qui représente lincrémentation du compteur Faire des essais Cf. Ex for.php
Structures de données
Introduction Les tableaux sont constitués de variables dindice qui, surtout si elles sont associées à une boucle, peuvent être très efficace. Un tableau est composé dune série de valeurs qui ont toutes le même nom Chacune de ces valeurs ayant un indice différent Chaque constituant dun tableau est appelé « élément » On peut créer des tableaux de la même façon quon crée des variables, tant que lon oublie pas de mettre des crochets pour signaler lindice. Ex : $ PaysEurope[1] = "France" ; $ PaysEurope[2] = "Espagne" ; Lordre des n° nest pas important et lon 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 Linitialisation 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. Labsence de valeur dindice 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 sil sagit 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 dindice. Elles commencent à zéro. Les nouvelles valeurs sont insérées dans un élément vide avec la valeur dindice 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 lafficher par exemple. La boucle for : Exemple afficher tous les pays recensés dans notre tableau : for ($compteur=1 ; $compteur<11 ; $compteur++) { echo " $Pays[$compteur] " ; } Commencer à 1 et aller jusquà 10, en augmentant à chaque fois le compteur de 1. Cela donnerait : echo " $Pays[1] " ; echo " $Pays[2] " ; echo " $Pays[3] " ; echo " $Pays[4] " ; echo " $Pays[5] " ; echo " $Pays[6] " ; echo " $Pays[7] " ; echo " $Pays[8] " ; echo " $Pays[9] " ; echo " $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 « $Pays[$compteur] » ; $compteur=$compteur+1 ; } Le résultat sera semblable à lexemple 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 " $IndicePays - $Pays "; } $PaysEurope = nom du tableau $IndicePays = nom de variables que lon crée nous-mêmes qui contient les valeurs dindice. $Pays = nom de variables que lon crée nous-mêmes qui contient lélément correspondant Lavantage de cette boucle est que nous navons pas besoin deffectuer le décompte du nombre déléments du tableau, puisquelle 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 lafficher, sans avoir à vérifier les éléments vides présents entre. Faire des essais: - Créer un tableau du même genre de « Pays » et tester les différentes boucles pour lafficher Cf. Ex foreach.php
Les tableaux non séquentiels Les tableaux non-séquentiels sont des tableaux qui ne sont pas remplis dans lordre croissant de leur indice, mais dans un ordre aléatoire. Ex: $Taille[1234]= " Enorme "; $Taille[1]= " Minuscule "; $Taille[654]= " Très grand "; Le problème avec une vérification séquentielle de ce genre de tableau est quil risque de ne contenir que très peu de valeur en réalité et comporter des espaces vide Fonctions current() et key() Ces fonctions sont des pointeurs pour conserver la trace dun é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 dindice affectée à lélément key est synonyme «d indice » ici. Ex : $ValeurIndiceCourant = key($Realisateur) ; renvoie la valeur dindice du 1er élément placé dans le tableau echo ($ValeurIndiceCourant) ; $ContenuCourant = current($Realisateur) ; echo ($ContenuCourant) ; renvoie la valeur du premier élément.
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 dun nouvel élément ajouté au tableau. Ex : $Realisateur[4]= "Orson Welles"; $Realisateur[1]= "Carol Reed"; $Realisateur[93]= "Fritz Lang"; $Realisateur[24]= "Jacques Tourneur"; $Realisateur[]= "Alfred Hitchcock"; next($Realisateur) $ValeurIndiceCourant = key($Realisateur) ; echo ($ValeurIndiceCourant) ; La valeur affichée est 1 et current() renvoie le nom « Carol Reed » Pour résumer: Pour naviguer dans le tableau, nous utilisons les fonctions next() et prev() Pour afficher la position courante, les fonctions current() et key() Cf. Ex next_prev.php
Les tableaux non-séquentiels (suite) Fonctions list() et each() 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. Nous utiliserons la boucle while peut effectuer cela while (list(ValeurIndice,ContenuElement) = each(NomTableau)) ValeurIndice = à lindice de lélément ContenuElement = au contenu de lélément Exemple while (list(ValeurIndiceElement,ContenuElement) = each($Realisateur)) { echo " $ValeurIndiceElement - $ContenuElement "; } La fonction list() renvoie dabord la valeur de lindice, puis le contenu de lélément. Cf. Ex list_each.php
Array functions Pour découvrir les array fonctions : cf. 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 dun tableau par ordre alphabétique : sort(NomTableau) Fonction asort() Fonction qui trie les éléments dun tableau par ordre alphabétique, mais en conservant les indices de chaîne : asort(NomTableau) Fonction rsort et arsort Tri inversé. Idem que les deux précédentes, mais par ordre décroissant. Fonction ksort Trie le contenu dun tableau associatif en fonction des indices de chaîne. Le principe est le même que pour les autres indices de tri.
Exemples darray functions (suite) Fonctions array_push() et array_pop() Permettent dajouter 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] = "Angleterre" ; array_pop($Pays) ; supprime le dernier élément ajouté au tableau (ici « Angleterre »). Mais cette fonction ne supprime quun élément à la fois. Fonctions Implode et Explode Fonctions qui permettent de stocker tout le contenu dun tableau en tant que chaîne ou linverse. Implode concatène les éléments dun 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 linverse, cest-à-dire quelle sépare les éléments de la chaîne.
Les tableaux multidimensionnels Nous nen parlerons pas ici. Les tableaux multidimentionnels sont des tableaux de tableau. Ex: NomTableau = array (indice => array (Contenu du tableau)) Ex : annuaire téléphonique Lindice 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 à lintérieur dune fonction ont une portée locale. Elle nexistent quà lintérieur même dune fonction et donc uniquement pour la durée dappel de cette fonction. Les variables dont la durée de vie correspond à la durée de vie dune page ont une portée globale. Illustration: <php? $MessageBienvenue = « Hello world »; VARIABLE GLOBALE function traduire_message ( $MessageFrancais) { $MessageFrancais = « Bonjour à tout le monde »; VARIABLE LOCALE return $MessageFrancais; } traduire_message (); echo $MessageBienvenue; echo $MessageFrancais; ?> Ce morceau de code ne renvoie pas la valeur de $MessageFrancais, puisque la durée de la variable locale se termine quand la fonction renvoie une valeur. La valeur renvoyée par la fonction na donc pas deffet une fois que la fonction se termine Solution pour afficher Cf. Ex variables_locales_globale.php
Variables locales vs globales (suite) Utiliser les variables globales à lintérieur des fonctions Lexemple de $GLOBAL <?php $MessageBienvenue = " Hello world "; function traduire_message ( $MessageFrancais) { echo $GLOBAL [" MessageBienvenue "]; $MessageFrancais = " Bonjour à tout le monde "; return $MessageFrancais; } traduire_message (); echo $MessageBienvenue; echo (traduire_message($MessageFrancais)); ?>
Lexercice
Consignes Reprenez votre exercice STAF 14 de lannée passée et reproduisez-le à laide darray, de boucles et de fonctions, comme nous venons de le voir. Lidée est de ne plus utiliser une structure envahie de « if », « then ».