Exercices
Questions à choix multiple

Leçon N° 04 : Structures de controle

Introduction
If then else
Boucles while
Boucles for
Switch
Break
Continue
Declare
Require_Include
Notes de page

Introduction

Tous les scripts PHP sont une suite d'instructions. D'une façon générale, une instruction peut être:

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éraleOrganigrammeExempleRé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éraleOrganigrammeExempleRé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éraleOrganigrammeExempleRésultat
while (condition)
{
   instructions
}
<?php
$a=1;
$b=10;
while ($a < $b)
{
   echo "$a , $b <br>;"
   $a++ ;
   $b-- ;
}
?>
1 , 10
2 , 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éraleOrganigrammeExempleRésultat
do
{
   instructions
}
while (condition)
<?php
do
{
   echo "$a, $b <br>;"
   $a++ ;
   $b-- ;
}
while ($a < $b)
?>
1 , 10
2 , 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);
?>
Construire un exemple avec while
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éraleOrganigrammeExempleRésultat
for (initialisation; évaluation; incrémentation)
{
instructions
}
<?php
for ($i = 1; $i <= 10; $i++)
{
    print $i."<br>";
}
?>
1
2
3
4
5
6
7
8
9
10

  1. L'initialisation est exécutée, quoi qu'il arrive au début de la boucle.
  2. L'évaluation a lieu au début de chaque itération :
  3. 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
CodeRésultat
<?php
for ($i = 1; $i <= 10; $i++)
{
     print $i."<br>";
}
?>
1
2
3
4
5
6
7
8
9
10

Exemple 2 L'évaluation est vide, boucle infinie, qui en fait s'arrête à 11'
CodeRésultat
<?php
for ($i = 1;;$i++)
{
     if ($i > 10)
     {
          break;
     }
     print $i."<br>";
}
?>
1
2
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
CodeRésultat
<?php
$i = 1;
for (;;)
{
     if ($i > 10)
     {
          break;
     }
     print $i."<br>";
     $i++;
}
?>
1
2
3
4
5
6
7
8
9
10

Exemple 4 : PHP supporte aussi la syntaxe alternative suivante pour les boucles for
CodeRésultat
<?php
for ($i = 1; $i <= 5; print $i, print "*".$i."<br>", $i++) ;
?>
1*1
2*2
3*3
4*4
5*5

Exemple 5 : autres syntaxe amternative :
CodeRésultat
<?php
for ($i=0; $i<=5; $i++): print "my love N° $i <br>" ; endfor;
?>
my love N° 0
my love N° 1
my love N° 2
my love N° 3
my love N° 4
my love N° 5

Execution des exemples ci-dessus
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.

OrganigrammeExempleRé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:
IFSWITCH
<?php
if ($i == 5)
{
    print "i égale 5";
}
if ($i == 10)
{
    print "i égale 10";
}
if ($i == 15)
{
    print "i égale 15";
}
?>
<?php
switch ($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 :
CodeRé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.
CodeRé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 :
CodeRé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
CodeRé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 :
CodeRé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()) // nombre d'arguments de la fonction {
case 3:
        $arg2 = func_get_arg(2); // si 3 arguments, on récupère le troisième
case 2:
        $arg1 = func_get_arg(1); // si 3 ou 2 arguments on récupère le second
case 1:
        $arg0 = func_get_arg(0); // on récupère le premier argument si 1,2, ou 3 arguments
break;
}
?>
D'autres syntaxes plus compexes sont également utilisables, se referrer à la documentation officielle
Construire des exemples avec switch
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; /* Vous pouvez aussi écrire 'break 1;' ici. */     }     $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 */
          }
     }
}
?>
Test de l'exemple ci-dessus
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.
CodeRé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";
}
?>
1Dehors
Milieu
Intérieur
2Dehors
Milieu
Intérieur
3Dehors
Milieu
Intérieur
4Dehors
Milieu
Intérieur
5Dehors
Milieu
Intérieur

Test de l'exemple ci-dessus
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-2008