Identification

Identifiant
Mot de passe
Mot de passe oublié ?

Partage de documents

Cours



Sondage

Quelle est votre profession ?
Etudiant / Elève
Enseignant / Pédagogue
Webmestre / Développeur
Journaliste / Blogueur
Autre
 
Comment trouvez-vous le système Manhali ?
Très utile
Utile
Peu utile
Inutile

  
 

Chapitre précédent
Chapitre suivant
Les structures de contrôle
Informations sur le chapitre :
Cours : Langage PHP
 
elhaddioui_ismail
  • Auteur : elhaddioui_ismail
  • Créé le : 18/05/2014 - 11:42
  • E-mail : ismail.elhaddioui
  • Modifié le : 18/05/2014 - 12:32
  • Lu : 1815 fois
  • Réponses correctes d'auto-évaluation : 68.18 %
  • Licence : BY(Paternité) - NC(Pas d'Utilisation Commerciale) - ND(Pas de Modification)
  • Note : 1/62/63/64/65/66/6 (1 Votes : 6/6)
  •  
    • Les conditions

    • Les conditions permettent d'exécuter des instructions selon certaines conditions, la structure conditionnelle la plus utilisée est "if/else". Cependant, il existe deux alternatives très pratiques dans des cas particuliers : Switch et l'opérateur ternaire.

      • L'instruction "if / else if / else" (si, sinon)

      La syntaxe de l'instruction "if" prend la forme suivante :

      if (expression booléenne) {
          Instructions ;
      }
      else if (expression booléenne) { //facultatif, on note "else if" ou "elseif"
      	Instructions ;
      }
      else { //facultatif
      	Instructions ;
      }

      Lorsque l'expression booléenne prend la valeur true, c'est le premier groupe d'instructions qui est exécuté. Dans le cas contraire, (false), c'est le deuxième groupe d'instructions, situé après le mot-clé "else", qui est exécuté.

      L'expression booléenne doit contenir un ou plusieurs opérateurs de comparaison comme :

      • $a == $b : $a est égal à $b
      • $a === $b : $a est égal à $b et ils sont de même type
      • $a != $b : $a est différent de $b
      • $a !== $b : $a est différent de $b ou ils ne sont pas du même type
      • $a > $b : $a est strictement plus grand que $b
      • $a < $b : $a est strictement plus petit que $b
      • $a >= $b : $a est plus grand ou égal à $b
      • $a <= $b : $a est plus petit ou égal à $b

      Pour les variables de type booléen, l'instruction: if ($var1 == true) est équivalente à : if ($var1). Ainsi que l'instruction if ($var2 == false) est équivalente à : if (!$var2).

      Remarque : Les accolades "{}" ne sont pas obligatoires quand on a une seule instruction à exécuter dans "if".

      Remarque 2 : Il existe une 2ème syntaxe pour l'instruction "if" en PHP, qui n'est pas très populaire, cette syntaxe sert à remplacer l'accolade d'ouverture par deux points (:) et l'accolade de fermeture par "endif". Dans cette syntaxe, on ne peut pas utiliser la notation "else if" mais seulement "elseif" (sans espace):

      if (expression booléenne) :
          Instructions ;
      elseif (expression booléenne) :
      	Instructions ;
      else :
      	Instructions ;
      endif;

      Exemple 1 :

      <?php
      $var_bool = false;
      if ($var_bool == false){ // ou bien : if (!$var_bool){
          echo "var_bool vaut false";
      }
      else {
      	echo "var_bool vaut true";
      }
       
      echo "<hr />";
      // 2ème méthode (sans accolades) : équivalente à la précédente
      if ($var_bool) echo "var_bool vaut true"; // ou bien : if ($var_bool == true)
      else echo "var_bool vaut false";
      ?>

      Exemple 2 :

      <?php
      // *** Le plus grand nombre ***
      $a = 3;
      $b = 8;
      $c = 5;
       
      // Structure imbriquée sans utilisé le bloc : elseif
      if ($a > $b){
          if ($a > $c){ // $a > $b et $a > $c
      		echo "Le plus grand est : ".$a;
      	}	
      	else { // $a > $b et $c > $a
      		echo "Le plus grand est : ".$c;
      	}
      }
      else { // $b > $a
      	if ($b > $c){ // $b > $a et $b > $c
      		echo "Le plus grand est : ".$b;
      	}	
      	else { // $b > $a et $c > $b
      		echo "Le plus grand est : ".$c;
      	}
      }
       
      echo "<hr />";
      // Structure if / else if / else : équivalente à la précédente
      if ($a >= $b && $a >= $c) echo "Le plus grand est : ".$a;
      else if ($b >= $a && $b >= $c) echo "Le plus grand est : ".$b;
      else if ($c >= $a && $c >= $b) echo "Le plus grand est : ".$c;
      else echo "Autre chose !";
       
      echo "<hr />";
      // Syntaxe alternative : équivalente aussi aux précédentes
      if ($a >= $b && $a >= $c) :
      	echo "Le plus grand est : ".$a;
      elseif ($b >= $a && $b >= $c) :
      	echo "Le plus grand est : ".$b;
      elseif ($c >= $a && $c >= $b) :
      	echo "Le plus grand est : ".$c;
      else :
      	echo "Autre chose !";
      endif;
      ?>
      • Les ternaires

      On peut utiliser l'opérateur ternaire à la place de "if / else" quand on veut affecter une valeur à une variable en fonction de cette valeur. La syntaxe est : $var = (expression) ? val1 : val2 ;

      Si l'expression est vraie (true), la variable "$var" vaut la valeur "val1", sinon, "$var" vaut "val2".

      Exemple :

      <?php
      if (!empty($_GET['var']) && is_numeric($_GET['var']))
          $var = $_GET['var'];
      else $var = 0;
      echo $var."<br />"; // $var = 5
       
      // Ternaire : équivalente à l'instruction if / else précédente
      $var = (!empty($_GET['var']) && is_numeric($_GET['var'])) ? $_GET['var'] : 0 ;
      echo $var."<br />"; // $var = 5
      ?>
      • L'instruction "Switch"

      Lorsqu'une variable ou une instruction peut prendre une valeur parmi plusieurs choix, alors il est préférable d'utiliser l'instruction "switch" plutôt que plusieurs instructions "if/else" imbriquées. La syntaxe est :

      switch(expression) {
          case val1 :
      		instructions ;
      	break;
      	case val2 :
      		instructions ;
      	break;
      	case val3 :
      	...
      	default:
      		instructions ;
      }

      Chaque instruction "case" doit avoir une instruction "break" à la fin, sinon PHP continuera à exécuter toutes les instructions qui suivent.

      Remarque : L'instruction "default" est facultative, dont l'action sera exécutée si aucune des conditions évaluées n'a été remplie. Contrairement à l'instruction "case", "default" ne contient pas un "break" à la fin.

      Exemple : afficher selon un numéro compris entre 1 et 12 le mois équivalent :

      <?php
      $mois = 2;
      switch($mois) {
          case 1 : // ou bien case "1" :
      		echo "janvier";
      	break;
      	case 2 :
      		echo "février";
      	break;
      	case 3 :
      		echo "mars";
      	break;
      	// Jusqu'à case 12 : echo "décembre";
      	default:
      		echo "Mois invalide !";
      }
      ?>
    • Les boucles

    • Les boucles permettent d'exécuter plusieurs fois une suite d'instructions. Il existe deux types de boucles :

      - Les boucles déterministes (for et foreach) : le nombre d'itérations est défini a l'entrée de la boucle ;

      - Les boucles indéterministes (while et do-while) : l'exécution de la prochaine itération est conditionnée par une expression booléenne.

      • La boucle "for"

      La syntaxe de la boucle for est :

      for(initialisation ; continuer tant que ; incrémentation) {
          instructions ;
      }

       Exemple : afficher tous les chiffres de 1 à 10 :

      <?php
      // les accolades ne sont pas nécessaires ici parce qu'il y a une seule instruction dans "for".
      for($i=1;$i<11;$i++)
          echo $i."-"; // affiche 1-2-3-4-5-6-7-8-9-10-
      ?>

       Il existe deux autres instructions que l'on peut utiliser dans toutes les boucles (for, foreach, while et do-while) :

      - L'instruction "break" : permet de sortir d'une boucle

      <?php
      $nbr = 5;
      for($i=1;$i<100;$i++){
          if ($i > $nbr)
      		break ;
      	echo $i."-"; // affiche 1-2-3-4-5-
      }

       Ici, la boucle "for" n'affichera pas tous les nombres de 1 jusqu'à 99, mais seulement jusqu'à 5 à cause de l'instruction "break".

      - L'instruction "continue" : permet d'éluder les instructions de l'itération courante et de commencer la prochaine itération.

      <?php
      echo "<hr />";
      for($i=0;$i<5;$i++){
          if ($i == 2)
      		continue ;
      	echo $i."-"; // affiche 0-1-3-4-
      }
      ?>

       Dans cet exemple, la boucle "for" n'affiche pas le nombre 2, et elle continue à exécuter les itérations suivantes.

      Exemple : afficher les nombres impairs compris entre 0 et 10 :

      Les deux exemples suivants affichent exactement le même résultat :

      <?php
      for ($i=0;$i<=10;$i++){
          if ($i % 2) // si le modulo de $i / 2 est différent de 0 (égal à true)
      		echo $i."-";  // affiche 1-3-5-7-9-
      }
      echo "<hr />";
      for ($i=0;$i<=10;$i++){
      	if (!($i % 2)) // si le modulo de $i / 2 est égal à 0 (égal à false)
      		continue ;
      	echo $i."-"; // affiche 1-3-5-7-9-
      }
      ?>

      Pour parcourir les valeurs d'un tableau, on doit utiliser la boucle "for" :

      <?php
      $semaine=array("lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche");
      for ($i=0;$i<7;$i++)
          echo $semaine[$i]."<br />";
      ?>
      • La boucle "foreach"

      Il existe également une boucle plus simple pour parcourir la totalité d'un tableau, c'est la boucle "foreach", cette instruction fonctionne uniquement sur les tableaux, la syntaxe est :

      foreach ($tableau as $element) {
          instructions ;
      }

       Exemple : afficher les jours de la semaine :

      <?php
      $semaine=array("lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche");
      foreach($semaine as $jour)
          echo $jour."<br />";
      ?>

       On a déjà parlé des variables superglobales, et on a dit qu'elles sont des tableaux ($_GET, $_POST, $_COOKIE, $_SESSION…). On peut alors afficher toutes les valeurs passées à la page courante via les superglobales en utilisant la boucle "foreach" :

      Exemple pour $_GET :

      <?php
      foreach ($_GET as $index => $valeur)
          echo $index." : ".$valeur."<br />";
      ?>
      • La boucle "while"

      La syntaxe de la boucle "while" est :

      while (continuer tant que) {
          instructions ;
      }

       La boucle "while" exécute les instructions tant que l'expression de la boucle est évaluée comme TRUE. La valeur de l'expression est vérifiée à chaque début de boucle, et, si la valeur change durant l'exécution de l'instruction, l'exécution ne s'arrêtera qu'à la fin de l'itération courante :

      Exemple :

      <?php
      $i = 0;
      while($i < 3){
          echo $i."-"; // affiche 0-1-2-
      	$i++; // incrémentation $i = $i + 1
      }
      ?>

      Cette boucle se répète 3 fois, on commence par $i = 0;

      - $i = 0, est-ce que $i < 3 ? Oui, on écrit "0-" et on incrémente : $i + 1 = 1

      - $i = 1, est-ce que $i < 3 ? Oui, on écrit "1-" et on incrémente : $i + 1 = 2

      - $i = 2, est-ce que $i < 3 ? Oui, on écrit "2-" et on incrémente : $i + 1 = 3

      - $i = 3, est-ce que $i < 3 ? Non, alors PHP ne vas pas exécuter les instructions qui sont dedans.

      Exemple : afficher les nombres paires compris entre 0 et 9 :

      <?php
      $i = 0;
      while($i <= 10){
          $i++;
      	if (!($i % 2)) // si le modulo de $i/2 est égal à 0 (égal à false)
      		echo $i."-"; // affiche 2-4-6-8-10-
      }
      // Le même exemple + l'instruction "continue"
      $i = 0;
      while($i <= 10){
      	$i++;
      	if ($i % 2) // si le modulo de $i/2 est différent de 0 (égal à true)
      		continue; 
      	echo $i."-"; // affiche 2-4-6-8-10-
       
      }
      // Le même exemple + l'instruction "break"
      $i = 0;
      while($i >= 0){
      	$i++;
      	if (!($i % 2)) // si le modulo de $i/2 est égal à 0 (égal à false)
      		echo $i."-"; // affiche 2-4-6-8-10-
      	if ($i > 10)
      		break;
      }
      ?>
      • La boucle "do-while"

      Il ya une seule différence entre les boucles "while" et "do-while", c'est que l'expression de "do-while" est testée à la fin de chaque itération plutôt qu'au début (le cas de "while"). Alors, la première itération de la boucle "do-while" est toujours exécutée (les instructions sont exécutées au moins une fois !). La syntaxe est :

      do {
          instructions ;
      } while (continuer tant que) ;

      Exemple :

      <?php
      $i = 1;
      do {
          echo $i."-";
      	$i++;
      } while($i < 3);
      ?>

      Pour mieux comprendre la différence entre "while" et "do-while". On va les tester avec une expression qui égale False depuis le début :

      Exemple :

      <?php
      echo "do-while : ";
      $i = 5;
      do {
          echo $i."-"; // affiche 5-
      	$i++;
      } while($i < 1);
      echo "<br />while : ";
      $i = 5;
      while($i < 1){
      	echo $i."-"; // n'affiche rien !
      	$i++;
      }
      ?>

       Dans cet exemple, on commence par $i = 5 et on incrémente la valeur de $i, alors l'expression ($i < 1) est toujours FALSE. Malgré ça, "do-while" exécute les instructions la première fois parce que l'expression n'est vérifiée qu'à la fin de la boucle.


    1. Laquelle de ces boucles est incorrecte ?

    2. if ($a > 0) { echo "Valeur positive"; } else if ($a == 0) { echo "Valeur nulle"; } else { echo "Valeur négative"; }
      if ($a > 0) : echo "Valeur positive"; else if ($a == 0) : echo "Valeur nulle"; else : echo "Valeur négative"; endif;
      if ($a > 0) : echo "Valeur positive"; elseif ($a == 0) : echo "Valeur nulle"; else : echo "Valeur négative"; endif;

    3. Quelle est la valeur de $b après les instructions suivantes :

      $a = True;

      $b = $a ? 1 : 0 ;

    4. True
      False
      1

    5. Les instructions "continue" et "break" peuvent être utilisées dans les boucles :

    6. for et while
      for et foreach
      for, foreach, while et do-while

    7. Quelle est la valeur de $i après l'exécution de ces boucles imbriquées :

      <?php
      $i = 1;
      for ($j=1;$j<=5;$j++) {
          for ($k=1;$k<=5;$k++){
      		$i++;
      	}
      }
      echo $i;
      ?>
    8. 1
      10
      25
      26

    Chapitre précédent
    Chapitre suivant

     
    InfoNuls 2010-2015 - Powered by Manhali