The manual Page
English version
accueil | glossaire | downloads | liens ]
 

Structures de contrôle en PHP

Introduction

Comme dans tout langage de programmation, le déroulement et le fonctionnement d'un programme PHP sont contrôlés par ce qu'on appelle des structures de contrôle : tests conditionnels, boucles, sauts...

PHP rassemble la plupart les structures de contrôle connues dans un format identique au C.

Structures conditionnelles

if

if (expr1) {
	code à exécuter si expr1 est validé
}
elseif (expr2) {
	code à exécuter si expr2 est validé
}
...
else {
	code à exécuter si aucune des expressions précédentes
	n'est validée
}

expr1 et expr2 sont des expressions qui doivent renvoyer une valeur booléenne. Cela peut être un test comme "a == b" ou la valeur renvoyée par une fonction, comme par exemple : if (! is_string($var)) ...

On peut enchaîner autant de elseif que nécessaire. Bien entendu, les elseif et else ne sont pas obligatoires, cela dépend de ce que l'on veut tester.

Si le code à exécuter lorsqu'une condition est validée ne comporte qu'une seule ligne, on peut omettre les accolades ("{" et "}").

switch

Ce structure de contrôle présente une alternative au if lorsque beaucoup de tests elseif sont à effectuer :

switch (expr1) {
	case expr2:
		code à exécuter si expr1=expr2
		break;
	case expr3:
		code à exécuter si expr1=expr3
		break;
	...
	default:
		code à exécuter s'il n'y a pas eu de
		correspondance jusqu'ici
		break;
}

La valeur de expr1 est comparée successivement à expr2, expr3... jusqu'à ce qu'une correspondance est trouvée. Si aucune correspondance n'est trouvée, c'est le code indiqué par default qui est exécuté (code exécuté par défaut). expr1, expr2... peuvent être n'importe quoi (integers, strings, resultats d'un appel de fonction...), pourvu que "expr1 == expr2" ait un sens.

break est là pour signaler la fin d'un bloc d'instructions case. Si on oublie de mettre break, le code du case suivant est exécuté !

(expr)?valeur1:valeur2

Sous ce titre peu évocateur se cache l'une des structures les plus intéressantes de PHP. Elle est directement reprise du C.

Cette structure s'utilise en fait directement dans les expressions. Elle permet de faire des tests simples et de récupérer un résultat exploitable directement. Voici un exemple :

echo "$nbr page".(($nbr>1)?"s":"")." trouvée".(($nbr>1)?"s":"").";

Ceci est censé afficher le nombre de pages trouvées après une requête dans une phrase correctement orthographiée (i.e. "3 pages trouvées" ou "1 page trouvée"). Explication : expr est d'abord évalué ; si le résultat est vrai, alors on renvoie valeur1 (un "s" dans l'exemple), sinon, on renvoie valeur2 (la chaîne de caractères vide dans l'exemple). C'est très simple et très efficace, ceci évite les constructions lourdes avec un if. Bien entendu, valeur1 et valeur2 peuvent être n'importe quoi.

Boucles

for

C'est le type de construction sûrement le plus utilisé, même si ce n'est pas le plus simple :

for (start_expr; cond_expr; iter_expr) {
	code à exécuter à chaque itération de boucle
}

La boucle fort se construit avec 3 expressions :

  1. La première (start_expr) est l'expression de départ ; elle n'est évaluée qu'une fois, lorsque la séquence de boucle commence. Généralement, on profite de cette expression pour initialiser un compteur (expression du genre "$i = 0").
  2. La seconde est une expression conditionnelle (exemple : i < 10) qui contrôle les itérations de la boucle. Cette expression est vérifiée au tout début de chaque itération (avant d'exécuter le code de la boucle) ; si son résultat est vraie, on continue l'itération en exécutant le code. Si son résultat est faux, on sort de la boucle sans même exécuter le code.
  3. La dernière expression est l'expression d'itération. Cette expression est évaluée à la fin de chaque itération. Typiquement, on en profite pour incrémenter le compteur initialisé dans start_expr.

Voici un petit exemple simple de compteur (on compte de 1 jusqu'à 10) :

for ($i = 1; $i < 11; $i++) {
	// Affichage de la valeur du compteur $i
	echo "$i\n";
}

Les instructions break et continue peuvent être utilisées, respectivement soit pour terminer immédiatement et définitivement la boucle (l'itération en cours est interrompue) pour continuer le programme avec le code qui suit, soit pour finir immédiatement l'itération en cours, mais on ne sort pas de la boucle (on continue par l'évaluation de l'expression d'itération).

Tout comme pour if, si le code à exécuter à chaque itération se limite à une ligne, on peut omettre les accolades ("{" et "}").

while

C'est la deuxième façon de faire des boucles en PHP. C'est plus simple qu'avec for car il n'y a qu'une seule expression à utiliser dans la construction :

while (expr) {
	code à exécuter tant que expr sera vérifiée
}

Le fonctionnement est assez simple : à chaque tours de boucle, expr est évaluée. Si le résultat est vrai, le code est exécuté avant de refaire une évaluation de expr et ainsi de suite. Dès que l'évaluation de expr renvoie faux, la boucle est arrétée et le programme continue après.

Voici le même compteur que celui de la boucle for :

$i = 1;
while ($i < 11) {
	// Affichage de la valeur du compteur $i
	echo "$i\n";
	$i++;
}

Le risque de la boucle while pour les conpteurs, c'est que l'on peut faire des boucles infinies... Attention, donc, à bien vérifier tous les incréments.

Comme pour for, il est possible d'interrompre une boucle while en plus milieu de l'exécution avec l'instruction break (break n; ne va interrompre qu'à la nième itération). De même avec continue, on reprend une nouvelle itération après avoir "sauté" le reste du code de la boucle (continue n; ne va exécuter ce mécanisme qu'à la nième itération).

Comme toujours, si une seule instruction ne doit être exécutée dans la boucle while, il est possible d'omettre les accolades.

do/while

do {
	code à exécuter dans l'itération
} while (expr);

Cette structure de contrôle est une variante de while : le test sur expr n'est effectué qu'en fin de boucle, c'est-à-dire que le bloc d'instructions est obligatoirement exécuté au moins une fois.

Le fonctionnement de break et continue est le même qu'avec while. de même, on peut enlever les accolades s'il n'y a qu'une seule instruction a exécuter.


format imprimable format imprimable



Copyright © 2000-2006 themanualpage.org - Ce site est soumis aux conditions décrites dans les licences GNU GPL et FDL.