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 , 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érale | Organigramme | Exemple | Ré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érale | Organigramme | Exemple | Ré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
|
- 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 |
<?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'
Code | Ré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
Code | Ré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
Code | Ré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 :
Code | Ré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.
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 |
<?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 :
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
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;
}
$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.
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";
}
?>
|
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-2020
|
|