" Dominique" Les deux dernières formes sont très courantes : elles utilisent une variable à la fois comme opérande dans la partie droite de l’affectation et pour stocker le résultat dans
Trang 1428 Chapitre 11 Récapitulatif PHP
Tableau 11.1 — Opérateurs arithmétiques
$a * $b Multiplication de $a et $b
$a % $b $a modulo $b (reste de la division de $a par $b )
11.4.1 Concaténation de chaînes
Un opérateur très fréquemment utilisé est la concaténation de chaînes, simplement
représentée par le point « »
$c1 = "Bonjour "’;
$c2 = "Dominique";
// Affichage de la cha^ ıne "Bonjour cher Dominique"
echo $c1 " cher " $c2;
Nous avons déjà discuté de l’opérateur d’affectation ’=’, qu’il ne faut surtout pas utiliser pour effectuer des tests d’égalité ! Il est couramment utilisé pour stocker dans une variable le résultat d’un calcul
$i = 4 + 3;
$c = "Bonjour cher";
$i = $i + 2;
$c = $c " Dominique"
Les deux dernières formes sont très courantes : elles utilisent une variable à la fois comme opérande (dans la partie droite de l’affectation) et pour stocker le résultat (dans la partie gauche de l’affectation) Il existe une syntaxe permettant d’exprimer
de manière plus économique ce type d’opération
$i += 2;
$c = " Dominique"
Cette notation évite d’avoir à répéter le nom de la variable Elle peut être utilisée avec tous les opérateurs arithmétiques et l’opérateur de concaténation
11.4.2 Incrémentations
Une autre technique très couramment utilisée est l’incrémentation d’un compteur, dans une boucle par exemple L’écriture normale est $i = $i + 1 PHP reprend du
C une syntaxe plus compacte : l’expression $i++ est équivalente à la précédente et incrémente de 1 la valeur de $i
Comme toute expression, $i++ a une valeur, en l’occurrence la valeur de $i avant son incrémentation Pour obtenir la valeur $i après son incrémentation, on utilise
Trang 2++$i Les mêmes expressions existent avec l’opérateur de soustraction Ces subtilités
du langage sont liées à la volonté de faire de PHP un langage ó tout (presque tout) est expression, c’est-à-dire a une valeur On peut tout à fait s’épargner l’utilisation de
ce genre de technique si on trouve qu’elles ne favorisent pas la qualité du code Voici quelques exemples résumant ces opérateurs unaires
$i = 4 ; // $i vaut 4
$i++; / $i vaut 5
$j = ++$i; // $j vaut 6, $i vaut 6
$k = $i++; // $k vaut 6, $i vaut 7
$k ; // $k vaut 5
11.4.3 Opérateurs de bits
La table 11.2 donne la liste des opérateurs de bits Il agissent sur des entiers et permettent de manipuler la représentation binaire En déplaçant tous les bits d’un cran vers la gauche par exemple, on obtient le double de sa valeur
Tableau 11.2 — Opérateurs de bits
$a & $b ET binaire Renvoie un entier dont les bits à 1 sont ceux à 1 dans
$a ET dans $b
$a | $b OU binaire Renvoie un entier dont les bits à 1 sont ceux à 1 dans
$a OU dans $b
$a ^ $b OU EXCLUSIF binaire Renvoie un entier dont les bits à 1 sont
ceux à 1 dans $a OU dans $b , mais pas dans les deux.
˜ $a Renvoie un entier dont les bits sont inversés par rapport à ceux de
la variable $a
$a << $b Décale les bits de $a de $b positions vers la gauche.
$a >> $b Décale les bits de $a de $b positions vers la droite.
11.4.4 Opérateurs logiques
Les opérateurs logiques sont donnés dans la table 11.3 Rappelons qu’une valeur est interprétée comme vraie si elle est différente de 0 ou de la chaỵne vide, et fausse sinon
Tableau 11.3 — Opérateurs logiques
$a && $b (ET) Renvoie vrai si $a ET $b sont vrais.
$a and $b Idem que &&.
$a || $b (OU) Renvoie vrai si $a OU $b est vrai.
$a xor $b Ou exclusif : $a OU $b est vrai, mais pas les deux.
Trang 3430 Chapitre 11 Récapitulatif PHP
Enfin la table 11.4 donne la liste des opérateurs de comparaison de PHP Il est très important de noter, si vous n’êtes pas familier du langage C ou de ses dérivés (C++, Java) que le test d’égalité s’écrit avec deux ’=’ Une erreur très courante est d’oublier un ’=’ dans un test d’égalité L’interpréteur ne signale rien puisque l’opérateur d’affectation renvoie une valeur qui peut être interprétée comme un booléen
$i = 1;
$j = 2;
if ($i == $j) // Renvoie FALSE: i est diff´ erent de j.
if ($i = $j) // Renvoie TRUE !
Dans l’exemple ci-dessus, le deuxième test utilise (par erreur) l’affectation ’=’ et non la comparaison ’==’ Dans ce cas la valeur $j est affectée à $i, et la valeur de cette affectation est elle-même la valeur de $j, soit 2, interprétée comme TRUE Non seulement le test ne donne pas le résultat attendu, mais la valeur de $i a été modifiée
Ce genre d’erreur est difficile à détecter, et fait partie des faiblesses de la syntaxe
du C qui a été reprise dans PHP
Tableau 11.4 — Opérateurs de comparaison
$a == $b Vrai si $a est égal à $b
$a != $b Vrai si $a est différent de $b
$a < $b Vrai si $a est inférieur à $b
$a > $b Vrai si $a est supérieur à $b
$a <= $b Vrai si $a est inférieur ou égal à $b
$a >= $b Vrai si $a est supérieur ou égal à $b
11.5 STRUCTURES DE CONTRÔLE
Les structures de contrôles sont les tests et les boucles Elles permettent de spécifier,
en fonction de l’état d’un script à l’exécution (déterminé par la valeur de certaines variables), quelles sont les parties du script à effectuer (structures de tests), ou combien de fois on doit les effectuer (structures de boucle)
L’unité de base pour décrire les actions d’un script est l’instruction, qui est
typi-quement l’affectation d’une valeur à une variable, ou toute autre expression plus complexe Les instructions sont séparées par des points virgules On place le contrôle
sur des blocs Un bloc est une suite d’instructions, exécutées en séquence et
solidai-rement, et encadrées par ’{’ et ’}’ Là encore cette syntaxe est reprise du C
Trang 411.5.1 Tests
La structure la plus courante est le if else Voici la syntaxe
if (expression )
{
// Bloc si expression est vraie.
}
else
{
// Bloc si expression est fausse.
}
// Ici le script continue.
Le else, et son bloc associé, est optionnel De même, si le bloc du if contient
une seule instruction, on peut se passer des accolades expression est en général un
test de comparaison, éventuellement plusieurs avec des opérateurs logiques Comme nous l’avons vu, on peut utiliser n’importe quelle expression, y compris des appels de
fonction, puisque toute valeur peut être interprétée comme vrai ou faux.
Les instructions if peuvent être imbriquées (un if dans un autre if) et cumulées (plusieurs if consécutifs), comme le montre l’exemple ci-dessous Il n’y a pas de limite à la profondeur d’imbrication des if, si ce n’est le manque de lisibilité qui en découle Une bonne règle est de ne pas s’autoriser plus de deux niveaux d’imbrications Au-delà, le code est trop complexe et il vaut mieux recourir à des fonctions
if (expr1 )
{
if (expr2 )
{
// expr1 et expr2 sont vraies.
}
else
{
// expr1 vraie, expr2 fausse
}
}
else if (expr3 )
{
// expr1 fausse, expr3 vraie.
}
else
{
// expr1 et expr3 fausses.
}
La structure else if illustrée ci-dessus peut s’écrire également elseif Elle permet notamment de passer en revue les différentes valeurs possibles pour une expression, et d’exécuter le bloc approprié Une structure équivalente pour ce type
de test est le switch
Trang 5432 Chapitre 11 Récapitulatif PHP
switch (expression )
{
case valeur1 :
// expression vaut valeur1.
// Il faut sortir du switch !
break;
case valeur2 :
// expression vaut valeur2.
break;
default:
// expression ne vaut aucune des valeurs list´ees
break;
}
Le switch est une structure de test initialisée avec l’instruction switch
(expression ) qui définit expression comme la valeur que l’on va ensuite
comparer avec une liste de possibilités Chaque possibilité de cette liste est
représentée par une instruction « case valeur : » Si expression est égale à
valeur, alors les instructions qui suivent sont exécutées, jusqu’à la fin du switch, et
ce indépendamment des case ! Pour indiquer que l’on veut sortir de la structure
switch dès que la valeur de expression a été rencontrée, et le bloc exécuté, il
faut finir ce bloc par une instruction break, comme indiqué ci-dessus
À la fin du bloc switch, il est possible d’ajouter le mot-clé default qui indique l’ensemble des instructions à exécuter si tous les case précédents ont échoué Signalons, pour conclure sur les tests, qu’il existe une syntaxe légèrement dif-férente pour les if-else Le bloc après le if ou le else commence par ’:’, et la structure se termine par endif;
if (expression ):
// Bloc si expression est vraie.
else:
// Bloc si expression est fausse.
endif;
11.5.2 Boucles
Comme d’habitude, on retrouve les même constructions qu’en C, ainsi qu’une instruction foreach pratique pour parcourir les tableaux associatifs
Le while
Le while permet d’exécuter un bloc d’insructions tant qu’une condition est remplie
La structure est :
while (expression )
{
// expression est vraie.
}