Chapitre suivantIndex des CoursChapitre précedentChapitre 8

Les structures de contrôle

 

Tous les scripts PHP sont une suite d'instructions. Une instruction peut être un assignement, un appel de fonction, une instruction conditionnelle ou bien une instruction qui ne fait rien (une instruction vide). Une instruction se termine habituellement par un point virgule (";"). De plus, plusieurs instructions peuvent être regroupées en bloc, délimité par des accollades ("{}"). Un bloc est considéré comme une instruction. Les différents types d'instructions sont décrits dans ce chapitre.

if

L'instruction if est une des plus importantes instructions de tous les langages, PHP inclus. Elle permet l'exécution conditionnelle d'une partie de code. Les fonctionnalités de l'instruction if sont les même en PHP qu'en C :

if (expr)    
         instructions 

Comme nous l'avons vu dans le paragraphe consacré aux expressions, "expr" est évaluée à sa "vraie valeur". Si l'expression expr est TRUE, PHP exécutera l'instruction et si elle est FALSE, l'instruction sera ignorée.

L'exemple suivant affiche la phrase a est plus grand que b si $a est plus grand que $b :

if ($a > $b)
           print "a est plus grand que b"; 

Souvent, vous voulez que plusieurs instructions soient exécutées après un branchement conditionnel. Bien évidemment, il n'est pas obligatoire de répéter l'instruction conditonnelle autant de fois que vous avez d'instructions à exécuter. A la place, vous pouvez rassembler toutes les instructions dans un bloc. L'exemple suivant affiche $a est plus grand que $b , et assigne la valeur de la variable $a à ma variable $b :

if ($a > $b) {
             print "a est plus grand que b";
             $b = $a;
             } 

Vous pouvez imbriquer indéfiniment des instructions "if" les unes dans les autres, ce qui permet une grande flexibilité dans l'exécution d'une partie de code suivant un grand nombre de conditions.

else

Souvent, vous voulez exécuter une instruction si une condition est remplie, et une autre instruction si cette condition n'est pas remplie. C'est à cela que sert else. else fonctionne avec après un if et exécute les instructions correspondantes au cas ou l'expression du if est FALSE. Dans l'exemple suivant, ce bout de code affiche a est plus grand que b si la variable $a est plus grande que la variable $b , et a est plus petit que b sinon:

if ($a > $b) {
             print "a est plus grand que b";
             } else {
                     print "a est plus petit que b";
                    } 

Les instructions après le else ne sont exécutées que si l'expression du if est FALSE, et si elle n'est pas suivi par l'expression elseif.

 

elseif

elseif, comme son nom l'indique, est une combinaison de if et de else. Comme l'expression else, il permet d'exécuter une instruction aprè un if dans le cas ou le "premier" if est évalué comme FALSE. Mais, à la différence de l'expression else, il n'exécutera l'instruction que si l'expression condionnelle elseif est évaluée comme TRUE. L'exemple suivant affichera a est plus grand que b, a est égal à b ou a est plus petit que b:

if ($a > $b) {
             print "a est plus grand que b";
             } elseif ($a == $b) {
                                 print "a est égal à b";
                                 } else {
                                        print "a est plus petit que b";
                                        } 

Vous pouvez avoir plusieurs elseif qui s'imbriquent les uns dans les autres, après un if initial. Le premier elseif qui sera évalué à TRUE sera exécuté. En PHP, vous pouvez aussi écrire "else if" en deux mots et son comportement sera identique à la version en un seul mot.

L'expression elseif est exécutée seulement si le if précédent et tout autre elseif précédent est évalués comme FALSE, et que votre elseif est évaluée àTRUE.

Autre syntaxe pour le if : if(): ... endif;

Le PHP propose une manière différente de rassembler des instructions à l'intérieur d'un if. C'est le moyen le plus simple d'inclure des blocs de code HTML à l'intérieur d'un if, mais il peut être utilisé dans n'importe quel contexte. Au lieu d'utiliser des accollades, vous pouvez utiliser la forme suivante: if ( expr ) suivit d'un point virgule, d'une ou plusieurs instructions, le tout finissant par un endif;. Considérons l'exemple suivant:

<?php if ($a==5): ?>
A = 5
<?php endif; ?> 

Dans l'exemple ci-desssus, le block HTML "A = 5" est inclus à l'intérieur d'un if en utilisant cette nouvelle syntaxe. Ce code HTML ne sera affiché que si la variable $a est égale à 5.

Cette autre syntaxe fonctionne aussi avec le else et elseif. L'exemple suivant montre une structure avec un if, un elseif et un else utilisant cette autre syntaxe:

if ($a == 5): 
        print "a equals 5";
        print "...";
elseif ($a == 6):
        print "a equals 6";
        print "!!!";
else:
        print "a is neither 5 nor 6";
endif; 

while

La boucle while est le moyen le plus simple d'implémenter une boucle en PHP. Cette boucle se comporte de la même manière qu'en C. L'exemple le plus simple d'une boucle while est le suivant :

while (expr) instruction

La signification d'une boucle while est très simple. Le 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 donc, 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 (chaque fois que le PHP exécute l'instruction, on appelle cela une itération). De temps en temps, si l'expression du while est FALSE avant la première itération, l'instruction ne sera jamais exécutée.

Comme avec le if, vous pouvez regrouper plusieurs instructions dans la même boucle while en les regroupant à l'intérieur de parenthèses ou en utilisant la syntaxe suivante: while (expr): instructions ... endwhile;

Les exemples suivants sont identiques, et affichent tous les nombres de 1 à 10:

/* exemple 1 */
$i = 1;
while ($i <= 10) {
                 print $i++; /* La valeur affiche est $i avant l'incrémentation
                                           (post-incrémentation) */
                 } 
/* exemple 2 */
$i = 1;
while ($i <= 10):
             print $i;
             $i++;
endwhile; 

do..while

Les boucles do..while ressemblent beaucoups aux boucles while, à la différence que l'expression est testée à la fin de chaque itération au lieu du début. La principale différence par rapport à la boucle while est 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 (l'expression est vérifiée au début de chaque itération).

Il n'y a qu'un syntaxe possible pour les boucles do..while :

$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.

Les utilisateurs familiers du C sont habitués à une utilisation différente des boucles do..while, qui permet de stopper l'exécution de la boucle au milieu des instructions, en l'encapsulant dans un do..while(0) la fonction break . Le code suivant montre une utilisation possible:

do {
   if ($i < 5) {
               print "i est assez grand.";
               break;
               }
   $i *= $factor;
   if ($i < $minimum_limit) {
                             break;
                            }
   print "i is ok";
   ...process i...
   } while(0); 

Ne vous inquiétez pas si vous ne comprennez pas tout correctement. Vous pouvez écrire des scripts très tres puissant sans utiliser cette fonctionnalité.

for

Les boucles for sont les boucles les plus complexes en PHP. Elle fonctionne comme les boucles for du langage C. La syntaxe des boucles for est la suivante:

for (expr1; expr2; expr3) instruction

La première expression ( expr1 ) est évaluée (exécutée) quoi qu'il arrive au début de la boucle.

Au début de chaque itération, l'expression expr2 est évaluée. 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.

A la fin de chaque itération, l'expression expr3 est évaluée (exécutée).

Les expressions peuvent éventuellement laissées vide. Si l'expression expr2 est laissée vide, cela signifie que c'est une boucle infinie (PHP implicitement qu'elle vaut TRUE, comme en C). Cela n'ai pas vraiment très utile, à moins que vous souhaitiez terminer votre boucle par l'instruction conditionnelle break .

Considèrons les exemples suivants. Tous affiche les chiffres de 1 à 10:

/* exemple 1 */
for ($i = 1; $i <= 10; $i++) {
print $i;
}
/* exemple 2 */
for ($i = 1;;$i++) {
if ($i > 10) {
break;
}
print $i;
}
/* exemple 3 */
$i = 1;
for (;;) {
if ($i > 10) {
break;
}
print $i;
$i++;
}
/* exemple 4 */
for ($i = 1; $i <= 10; print $i, $i++) ; 

Bien évidemment, le premier exemple est le plus simple de tous (ou peut être la quatrième), mais vous pouvez aussi pensez qu'utiliser une expression vide dans une boucle for peut être utile parfois.

PHP supporte aussi la syntaxe alternative suivante pour les boucles for :

for (expr1; expr2; expr3): instruction; ...; endfor;

Les autres langages ont l'instructions "foreach" pour accéder aux éléments d'un tableau. PHP utilise l'instruction while et les fonctions list() et each() pour cela. Voir la documentation pour des exemples d'utilisations de ces fonctions.

 

break

L'instruction break permet de sortir d'une boucle.

$i = 0;

while ($i < 10) {

if ($arr[$i] == "stop") {

break;

}

$i++;

}

continue

L'instruction continue est utilisée dans une boucle afin d'éluder les instructions de l'itération courante afin de passer directement à l'itération suivante.

while (list($key,$value) = each($arr)) {

if ($key % 2) { // skip even members

continue;

}

do_something_odd ($value);

}

switch

L'instruction switch équivaut à une serie d'instruction if. Dans de nombreuses occasion, vous aurez besoin de comparer la meme variable (ou expression) avec un grand nombre de valeur différentes, et d'exécuter différentes parties de code suivant la valeur à laquelle elle est égale. C'est exactement à cela que sert l'instruction switch.

Les deux exemples suivants sont deux manières différentes d'écrire la même chose, l'une en utilisant une séries de if, et l'autre en utilisant l'instruction switch :

/* exemple 1 */ 
if ($i == 0) {
print "i égal 0"; }
if ($i == 1) {
print "i égal 1";
}
if ($i == 2) {
print "i égal 2"; } 
/* exemple 2 */ 
switch ($i) {
case 0:
print "i égal 0";
break;
case 1:
print "i égal 1";
break;
case 2:
print "i égal 2";
break;
} 

Il est important de comprendre que l'instruction switch exécute chacune des clauses dans l'ordre. L'instruction switch est exécutée ligne par ligne. Au début, aucun code est exécuté. Seulement lorsqu'un case est vérifié, PHP exécute alors les instructions correspondantes. PHP continue d'exécuter les instructions jusqu'à la fin du bloc d'instructions du switch block, ou bien dè qu'il trouve l'instruction break. Si vous ne pouvez pas utiliser l'instruction break à la fin de l'instruction case, PHP continuera à exécuter toutes les instructions qui suivent.Par exemple :

/* exemple 3 */ 
switch ($i) {
case 0:
print "i égal 0";
case 1:
print "i égal 1";
case 2:
print "i égal 2";
} 

Dans cet exemple, si $i est égal à 0, PHP va exécuter quand même toutes les instructions qui suivent. Si $i est égal à 1, PHP exécutera les deux dernières instructions. Et seulement si $i est égal à, vous obtiendrez le résultat escompté, c'est-à-dire, l'affiche de "i égal 2. Donc, l'important est de ne pas oublier l'instruction break .

Un "case" spécial est "default". Ce cas correspond à tous les cas qui ne fonctionnes pas cité précédemment. Par exemple :

/* exemple 4 */ 
switch ($i) {
case 0:
print "i égal 0";
break;
case 1:
print "i égal 1";
break;
case 2:
print "i égal 2";
break;
default:
print "i n'est pas égal à 0, 1 ou 2";
} 

Une autre chose à mentionner est que l'instruction case peut ê une expression à de type sclaire, c'est-à-dire nombre entier, nombre à virgule flottante; et chaîne de caractère. Les tableaux sont sans interêt dans ce contexte-là.

 

require

The require statement replaces itself with the specified file, much like the C preprocessor's #include works.

This means that you can't put a require statement inside of a loop structure and expect it to include the contents of a different file on each iteration. To do that, use an include statement.

require 'header.inc';

include

La fonction include inclues et évalue le fichier spécifié en argument.

Cela a lieux à chaque fois que la fonction include est rencontrée. Donc vous vous pouvez utiliser la fonction include dans une structure de boucle pour inclure un nombre indéfinis de fichiers.

$files = array ('first.inc', 'second.inc', 'third.inc');
for ($i = 0; $i < count($files); $i++) {
include $files[$i];
} 

include diffère de la fonction require dans le sens où la fonction include ré-évalue le fichier passé en paramètre à chaque fois qu'il est rencontré, alors que la fonction require require est remplacé par le fichier passé en paramètre la première fois que la fonction est rencontrée, que le contenue du fichier soit utilisé ou non. (par exemple, si la fonction require est incluses dans une structure conditionnelle qui est évaluée comme fausse).

Parceque la fonction include nécessite uen construction particulière, vous devez l'inclure dans un block si elle est incluse dans une structure conditionnelle.

/* This is WRONG and will not work as desired. */
if ($condition)
include($file);
else
include($other);
/* This is CORRECT. */
if ($condition) {
include($file);
} else {
include($other);
} 

Lorsque le fichier est évalué, le parseur débute en mode HTML, puis affiche le contenue du fichier jusqu'à rencontrer le prmier tag PHP


 

Chapitre précedentIndex des CoursChapitre suivant

Révisé le :23-Jan-2008| ©2008 www.technologuepro.com