Introduction
Tous les scripts PHP sont une suite d'instructions.
D'une façon générale, une instruction peut être:
- une assignation (affectation de valeur à une variable ou à une constante), 
- un appel de fonction, de methode, de classe , de pseudo-fonction (echo, print)
- une inclusion d'une autre source
- une structure affectant le déroulement du programme, (c'est l'objet principal de la présente leçon) qui peut être : 
- une instruction conditionnelle (if , switch...)
- une boucle (for, while)
 
Les instructions conditionnelles comprennent :
- Un ou plusieurs mots-clés tels que : if, while, switch, then, else, ...(décrits ci-après)
- Une ou plusieurs "expressions" renvoyant vrai (TRUE) ou faux (FALSE)  Exemple : $a > $b , $a == $myVar...
(on appelera dans la suite du chapitre "expression" tout ensemble de code renvoyant vrai (TRUE) ou faux (FALSE))  
Structure If then ... else 
Comme dans les autres langages, l'instruction 
if est l'une des plus utilisée. 
Elle permet l'exécution conditionnelle d'une partie de code. 
 
L'instruction 
if se comporte en PHP comme en C ou en Java, 
vous pouvez donc passer au point suivant si vous connaissez un de ces langages, 
notez simplement la forme abrégée décrite en fin de paragraphe et spécifique à PHP.
Instruction if then else de base :
| Syntaxe générale | Organigramme | Exemple | Résultat | 
|---|
| if (condition_1)
{
   bloc_instructions_1
}
else
{
   bloc_instructions_2
}
?> |   | <?php$a=1 ;
 $b=2 ;
 if ($a==$b)
 {
 echo '$a et $b sont égaux <br>';
 }
 else
 {
 echo '$a et $b sont différents <br>';
 }
 
 | 
$a et $b sont différents
 | 
Instruction if then else plus élaborée :
| Syntaxe générale | Organigramme | Exemple | Résultat | 
|---|
| 
if (condition_1){
 bloc_instructions_1
 }
 elseif (condition_2)
 {
 bloc_instructions_2
 }
 else
 {
 bloc_instructions_3
 }
 ?>
 |   | <?php$a=1 ;
 $b=2 ;
 if ($a==$b)
 if ($a==$b)
 {
 echo '$a et $b sont égaux <br>';
 }
 elseif ($a > $b)
 {
 echo '$a est supérieur à $b <br>';
 }
 else
 {
 echo '$a est inférieur à $b <br>';
 }
 ?>
 | 
$a est inférieur à $b
 | 
La condition_1 est évaluée de façon à produire un résultat booléen (TRUE/FALSE) 
 
Si condition_1 renvoie TRUE, PHP exécutera bloc_instructions_1 et si elle renvoie FALSE, 
bloc_instructions_2 sera executé si expression_2 ext vrai, sinon bloc_instructions_3 sera
executé
On peut imbriquer indéfiniment des instructions if les unes dans les autres, 
ce qui permet une grande flexibilité dans l'exécution de morceaux de code suivant 
un grand nombre de conditions. Seulement la source produite devient rapidement complexe
à interprèter; pour en faciliter la maintenance on veillera à utiliser le maximum
de parenthèses dans les expressions et de commentaires à l'extèrieur. 
 
Cette instruction possède une forme abbrégée qui ne supporte pas les imbrications.
Syntaxe : 
<?php
(condition) ? (bloc d'instructions éxécuté si expression=vrai) : (bloc d'instructions éxécuté si expression=faux)
?>
Construire un exemple avec if then else
Nom du fichier : exercises_04\lesson_04_if_then_else.php
Structures basées sur le while
La structure 
while est le moyen le plus simple d'implémenter une boucle de programme en PHP.
 
La construction la plus simple d'une structure 
while est la suivante : 
| Syntaxe générale | Organigramme | Exemple | Résultat | 
|---|
| 
while (condition){
 instructions
 }
 
 |   | <?php$a=1;
 $b=10;
 while ($a < $b)
{
   echo "$a , $b <br>;"
   $a++ ;
   $b-- ;
}
?>
 | 
1 , 102 , 9
 3 , 8
 4 , 7
 5 , 6
 
 | 
PHP exécute l'instruction tant que l'expression de la boucle 
while 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 du bloc d'instructions, l'exécution ne s'arrêtera 
qu'à la fin de l'itération (chaque fois que le PHP exécute le bloc d'instructions de la boucle de programme, 
on appelle cela une itération). 
Si l'expression du 
while renvoie FALSE avant la première itération, 
le blc d'instructions ne sera jamais exécuté. 
 
Si les instructions sont telles que l'espression reste toujours vraie, le boucle ne s'arrête jamais.("plantage" du programme) 
Les boucles 
 do..while ressemblent beaucoup aux boucles while, 
mais l'expression est testée à la 
fin de chaque itération plutôt qu'au début. 
Il en résulte donc que la première itération de la boucle 
do..while est toujours exécutée 
(l'expression n'est testée qu'à la fin de l'itération), 
ce qui n'est pas le cas lorsque vous utilisez une boucle 
while normale. 
(l'expression est vérifiée au début de chaque itération). 
 
Il n'y a qu'une syntaxe possible pour les boucles 
do..while :  
| Syntaxe générale | Organigramme | Exemple | Résultat | 
|---|
| 
do {
 instructions
 }
 while (condition)
 
 |   | <?phpdo
 {
   echo "$a, $b <br>;"
   $a++ ;
   $b-- ;
}
while ($a < $b)
?>
 | 
1 , 102 , 9
 3 , 8
 4 , 7
 5 , 6
 
 | 
Autre exemple :
<?php
$i = 0;
do 
{
   print $i;
} 
while ($i>0);
?>
La boucle ci-dessus ne va être exécutée qu'une seule fois, car lorsque l'expression est évaluée, 
elle vaut FALSE (car la variable $i n'est pas plus grande que 0) 
et l'exécution de la boucle s'arrête. 
 
Le code suivant montre une construction particulière (
while(0)) permettant d'isoler un bloc 
de code éxécuté une seule fois mais réalisant une opération particulière : 
<?php
do
{
    instructions ne s'executant qu'une seule fois
}
while(0);
?>
Nom du fichier : exercises_04\lesson_04_b_while.php
Structures basées for
Les boucles 
for sont les boucles les plus complexes des structures de controle. 
Au moins dans leur forme standard, elles fonctionnent comme les boucles 
for des langages C ou java. 
| Syntaxe générale | Organigramme | Exemple | Résultat | 
|---|
| 
for (initialisation; évaluation; incrémentation){
 instructions
 }
 
 |   | <?phpfor ($i = 1; $i <= 10; $i++)
 {
 print $i."<br>";
 }
 ?>
 | 
12
 3
 4
 5
 6
 7
 8
 9
 10
 | 
- L'initialisation est exécutée, quoi qu'il arrive au début de la boucle.
- L'évaluation a lieu au début de chaque itération :
- Si l'évaluation vaut TRUE, la boucle continue et l'instruction est exécutée. 
- Si l'évaluation vaut FALSE, l'exécution de la boucle s'arrête. 
- L'incrémntation est exécutée à la fin de chaque itération. 
Ces trois expressions peuvent éventuellement être laissées vides. 
 
Si l'evaluation est laissée vide, cela signifie que c'est une boucle infinie 
 
(PHP considère implicitement qu'elle vaut TRUE, comme en C). 
Dans ce cas, la boucle devra donc être terminée par l'instruction 
break. 
 
Exemples : 
Exemple 1 : on imprime les chiffres de 1 à 10  
| Code | Résultat | 
|---|
| <?phpfor ($i = 1; $i <= 10; $i++)
 {
 print $i."<br>";
 }
 ?>
 | 
12
 3
 4
 5
 6
 7
 8
 9
 10
 | 
Exemple 2 L'évaluation est vide, boucle infinie, qui en fait s'arrête à 11' 
| Code | Résultat | 
|---|
| <?phpfor ($i = 1;;$i++)
 {
 if ($i > 10)
 {
 break;
 }
 print $i."<br>";
 }
 ?>
 | 
12
 3
 4
 5
 6
 7
 8
 9
 10
 | 
Exemple 3 les trois expressions sont laissées vides : l'initialisation 
et l'incrémentation de la variable de boucle $i qui sert de variable de 
boucle est gérée à l'intérieur de la boucle de programme 
| Code | Résultat | 
|---|
| <?php $i = 1;
 for (;;)
 {
 if ($i > 10)
 {
 break;
 }
 print $i."<br>";
 $i++;
 }
 ?>
 | 
12
 3
 4
 5
 6
 7
 8
 9
 10
 | 
Exemple 4 : PHP supporte aussi la syntaxe alternative suivante pour les boucles for 
| Code | Résultat | 
|---|
| <?php for ($i = 1; $i <= 5; print $i, print "*".$i."<br>", $i++) ;
 ?>
 | 
1*12*2
 3*3
 4*4
 5*5
 | 
Exemple 5 : autres syntaxe amternative : 
| Code | Résultat | 
|---|
| <?php for ($i=0; $i<=5; $i++): print "my love N° $i <br>" ; endfor;
 ?>
 | 
my love N° 0my love N° 1
 my love N° 2
 my love N° 3
 my love N° 4
 my love N° 5
 
 | 
Nom du fichier : exercises_04\lesson_04_for_next_1.php
Construire des exemples avec for
Nom du fichier : exercises_04\lesson_04_c2_for.php
Imprimer les caractères ascii avec for
Nom du fichier : exercises_04\lesson_04_for_ascii.php
Nb: Il existe aussi la boucle foreach qui sera vue en détail 
au chapitre des tableaux 
La structure Switch
L'instruction 
switch équivaut à une série de structures 
if. 
 
Permet de comparer une variable à un grand nombre de valeurs différentes, 
et d'exécuter différentes parties de code suivant la valeur de cette variable.  
| Organigramme | Exemple | Résultat | 
|---|
|   | 
<?php$i=1;
 switch ($i)
 {
 case 0:
 print '$i est égal à 0';
 break;
 case 1:
 print '$i est égal à 1';
 break;
 case ($i > 10):
 print '$i est supérieur à 10';
 break;
 }
 ?>
 
 | 
$i est égal à 1
 | 
Il est souvent plus fiable, plus pratique, plus "élégant" d'utiliser une seule structure 
 switch 
plutôt que plusieurs structures 
if (En plus le déroulement du programme sera plus rapide). 
Les deux exemples suivants sont deux manières différentes d'écrire la même chose, 
l'une en utilisant une série de 
if, 
et l'autre en utilisant l'instruction 
switch: 
| IF | SWITCH | 
|---|
| <?phpif ($i == 5)
 {
 print "i égale 5";
 }
 if ($i == 10)
 {
 print "i égale 10";
 }
 if ($i == 15)
 {
 print "i égale 15";
 }
 ?>
 
 | <?phpswitch ($i)
 {
 case 5:
 print "i égale 5";
 break;
 case 10:
 print "i égale 10";
 break;
 case 15:
 print "i égale 15";
 break;
 }
 ?>
 | 
L'instruction 
switch exécute chacune des 
clauses dans l'ordre, ligne par ligne. 
C'est seulement lorsqu'un 
case est vérifié que
PHP exécute alors les instructions correspondantes. 
Contrairement aux instructions 
switch des autres langages, 
PHP continue d'exécuter chaque bloc d'instructions jusqu'à la fin de la structure switch, 
ou bien dès qu'il trouve l'instruction 
break. 
Autrement dit, si vous n'utilisez pas l'instruction 
break, 
PHP continuera à exécuter toutes les instructions qui suivent. Par exemple : 
| Code | Résultat | 
|---|
| <?php $i=0;
 switch ($i)
 {
 case 0:
 print '$i est égal à 0<br>';
 case 5:
 print '$i est égal à 5<br>';
 case ($i < 10):
 print '$i est inférieur à 10<br>';
 }
 ?>
 
 | 
$i est égal à 0$i est égal à 5
 $i est inférieur à 10
 
 | 
Dans cet exemple, comme 
$i est égal à 0, PHP va exécuter quand même toutes les 
instructions qui suivent. Si 
$i est égal à 5, PHP exécutera les deux dernières 
instructions, et ainsi de suite. Dans ce cas seule l'utilisation de 
l'instruction 
break permet d'obtenir un résultat 
comparable à la même structure dans un autre langage (seul le bloc correspondant au 
 case  
correspondant au critère est exécuté, et pas ceux qui suivent. 
Dans une instruction 
switch, la condition n'est évaluée qu'une fois, et le résultat 
est comparé à chaque 
case. Au contraire, dans une structure 
elseif, 
les conditions sont évaluées à chaque comparaison. Si votre condition est plus compliquée qu'une simple comparaison, 
ou bien fait partie d'une boucle, 
switch sera plus rapide. 
La liste des instructions d'un case peut être vide, auquel cas PHP utilisera 
la liste des instructions du case suivant. Ce peut être utile pour regrouper plusieurs conditions.
| Code | Résultat | 
|---|
| <?php switch ($i)
 {
  case 0:
  case 1:
  case 2:
  print "i est plus petit que 3 mais n'est pas négatif";
  break;
  case 3:
  print "i égale 3";
 }
 ?>
 | 
i est plus petit que 3 mais n'est pas négatif
 | 
Un 
case spécial est 
default. Ce cas est utilisé lorsque tous les case ont échoués. 
Il doit être le dernier cas listé. Par exemple : 
| Code | Résultat | 
|---|
| <?php $i=22;
 switch ($i)
 {
 case 0:
 print "i égale 0";
 break;
 case 1:
 print "i égale 1";
 break;
 case 2:
 print "i égale 2";
 break;
 default:
 print "i n'est ni égal à 2, ni à 1, ni à 0.";
 }
 ?>
 | 
i n'est ni égal à 2, ni à 1, ni à 0
 | 
L'instruction 
case ne peut être qu'une expression 
de type scalaire, c'est-à-dire nombre entier, nombre à virgule flottante et chaîne de caractères. 
 
Syntaxe alternative : les acolades sont remplacés par 
":" au début et 
endswitch à la fin
| Code | Résultat | 
|---|
| <?php $i=22;
 switch ($i):
 {
 case 0:
 print "i égale 0";
 break;
 case 1:
 print "i égale 1";
 break;
 case 2:
 print "i égale 2";
 break;
 default:
 print "i n'est ni égal à 2, ni à 1, ni à 0.";
 endswitch;
 ?>
 | 
i n'est ni égal à 2, ni à 1, ni à 0
 | 
Si vous voulez évaluer plusieurs variables, ou des conditions particulères, vous pouvez faire :
| Code | Résultat | 
|---|
| <?php $i=-10;
 switch (true)
 
 case ($i == 0):
 echo '$i est égal à 0';
 break;
 case ($i <= 0):
 echo '$i est inférieur à 0';
 break;
 default:
 echo '$i est supérieur à 0';
 break;
 }
 ?>
 | 
$i est inférieur à 0
 | 
PHP4 supporte maintenant les arguments de fonctions , de la façon suivante:
<?php
switch (func_num_args()) 
{
case 3:
        $arg2 = func_get_arg(2);
case 2:
        $arg1 = func_get_arg(1);
case 1:
        $arg0 = func_get_arg(0);
break;
}
?>
D'autres syntaxes plus compexes sont également utilisables, 
se referrer à la documentation officielle
Nom du fichier : exercises_04\lesson_04_switch_1.php
Construire des exemples avec switch
Nom du fichier : exercises_04\lesson_04_switch_2.php
Sortie de boucle Break
L'instruction 
break permet de sortir d'une structure 
for, while, foreach ou switch. 
break accepte un argument numérique optionnel qui vous indiquera combien de 
structures emboitées doivent être interrompues. 
<?php
$i = 0;
while ($i < 10) 
{
    if ($arr[$i] == "stop") 
    {
        break; 
    }
    $i++;
}
?>
/* Utilisation de l'argument optionnel. */
<?php
$i = 0; 
 
while ( ++$i ) 
 
{ 
 
     echo '----->$i='." $i  ";
 
     for ($j=1;$j<=15;$j++) 
 
     { 
 
          echo '$j='."$j"; 
 
          if (($j==6) || ($j == 8)) 
 
          { 
 
               echo ' à $j = 5 ou $j = 2  on sort du switch '; 
 
               break 1; /* Ne sort que de la boucle for. */ 
 
          } 
 
          if (($i==2) && ($j==5)) 
 
          { 
 
               echo 'à $i=2 et $j=5 on sort complètement '; 
  
               break 2; /* On sort du for et du while */ 
 
          } 
 
     } 
 
} 
 
?> 
Nom du fichier : exercises_04\lesson_04_break.php
Continue
L'instruction 
continue est utilisée dans un bloc d'unstruction de boucle 
afin de ne pas executer le restant des instructions de 
l'itération courante et passer directement à l'itération suivante. 
Comme 
break,  continue accepte un argument numérique optionnel qui indique
combien de structures emboitées doivent être ignorées. 
Dans l'exemple ci-dessous le 
continue 3  renvoie directement au début de l'itération suivante du premier bloc 
 while.
| Code | Résultat | 
|---|
| <?php $i = 0;
 while ($i++ < 5)
 {
 echo "$i";
 echo "Dehors\n";
 while (1)
 {
 echo "  Milieu\n";
 while (1)
 {
 echo "  Intérieur\n";
 continue 3;
 }
 echo "Ceci n'est jamais atteint.\n";
 }
 echo "Ceci non plus.\n";
 }
 ?>
 | 
1DehorsMilieu
 Intérieur
 2Dehors
 Milieu
 Intérieur
 3Dehors
 Milieu
 Intérieur
 4Dehors
 Milieu
 Intérieur
 5Dehors
 Milieu
 Intérieur
 
 | 
Nom du fichier : exercises_04\lesson_04_f1_continue.php
Construire des exemples avec continue
Nom du fichier : exercises_04\lesson_04_f_continue.php
Declare
Fera partie du cours PHP niveau 2 _ Voir documentation officielle
Require et Include 
La commande 
require()  se remplace elle-même par le contenu du fichier spécifié, 
comme les préprocesseurs C le font avec la commande #include. 
 
Il est important de noter que lorsqu'ue une erreur se produit dans 
un fichier 
include()  ou 
require(), 
les erreurs d'analyse apparaîtront en HTML tout au début du fichier, 
et l'analyse du fichier parent ne sera pas interrompue. 
 
Pour cette raison, le code qui est dans le fichier doit être placé entre 
les balises habituelles de PHP. 
require() et include() n'est pas vraiment une fonction PHP : c'est plus une instruction du langage. 
require()  ne fonctionne pas comme les fonctions standards, 
elle est indépendante des structures de contrôle (cela ne sert à rien 
de la placer dans une condition, elle sera toujours exécutée). De plus, 
elle ne retourne aucune valeur. Lire une valeur retournée par un 
require()  
retourne une erreur d'analyse. 
Les boucles n'affectent pas le comportement de 
require(). 
Même si le code contenu dans le fichier source est appelé dans la boucle, 
require()  n'est exécuté qu'une fois, 
même s'il apparait plusieurs fois dans le code. 
Par contre, si l'on veut executer une inclusion suivant certaines conditions 
décrites dans le code, ou si on veut l'executer plusieurs fois,  
il faut alors utiliser 
include() . 
<?php
  require('header.inc');
?>
Attention : 
include() et 
require() ajoutent le contenu du fichier cible dans 
le script lui-même. Elles n'utilisent pas le protocole HTTP ou tout autre protocole. 
 
Toute variable qui est dans le champs du script sera accessible dans le fichier 
d'inclusion, et vice-versa. 
<?php
  require ("file.inc?varone=1&vartwo=2"); 
/* Ne fonctionne pas. */
  $varone = 1;
  $vartwo = 2;
  require ("file.inc");
/* $varone et $vartwo seront accessibles à file.inc */
?>
|  |   | Tous droits réservés. 2005-2020 
  |   |