Les expressions sont la partie la plus importante du PHP. En PHP, presque tout
ce que vous écrivez est une expression. La manière la plus simple
de définir une expression est : "tout ce qui a une valeur".
Les formes les plus simples d'expressions sont les constantes et les variables.
Lorsque vous écrivez "$a = 5", vous assignez la valeur '5' à la
variable $a. Bien évidemment, '5' vaut 5 ou, en d'autres termes, '5'
est une expression avec pour valeur 5 (dans ce cas, '5' est un entier constant).
Après cette assignation, vous pouvez considérer que $a a pour
valeur 5 et donc, écrire $b = $a, revient à écrire $b = 5.
En d'autres termes, $a est une expression avec une valeur de 5. Si tout fonctionne
correctement, c'est exactement ce qui arrive.
Un exemple plus complexe concerne les fonctions. Par exemple, considérons
la fonction suivante :
<?php
function foo () {
return 5;
}
?>
Considérant que vous êtes familier avec le concept de fonction,
(si ce n'est pas le cas, jetez un oeil au chapitre concernant les fonctions),
vous serez d'accord que $c = foo() est équivalent à $c = 5, et
vous aurez tout à fait raison. Les fonctions sont des expressions qui
ont la valeur de leur "valeur de retour". Si foo() renvoie 5, la valeur de
l'expression 'foo()' est 5. Habituellement, les fonctions ne font pas que
renvoyer une valeur constante mais réalisent des traitements.
Bien sûr, les valeurs en PHP n'ont pas à être des
valeurs numériques, comme c'est souvent le cas. PHP supporte 3
types de variables scalaires : les valeurs entières, les nombres
à virgule flottante et les chaînes de caractères
(une variable scalaire est une variable que vous ne pouvez pas scinder en
morceau, au contraire des tableaux par exemple). PHP supporte aussi deux
types composés : les tableaux et les objets. Chacun de ces types
de variables peut être affecté ou renvoyé par une
fonction.
Les utilisateurs de PHP/FI 2 ne verront aucun changement. Malgré tout,
PHP va plus loin dans la gestion des expressions, comme le font d'autres
langages. PHP est un langage orienté expression, dans le sens où
presque tout est une expression. Considérons l'exemple dont nous avons
déjà parlé, '$a = 5'. Il est facile de voir qu'il y a
deux valeurs qui entrent en jeux ici, la valeur numérique constante '5'
et la valeur de la variable $a qui est mise à jour à la valeur 5.
Mais, la vérité est qu'il y a une autre valeur qui entre en jeu ici
et c'est la valeur de l'assignation elle-même. L'assignation elle-même
est assignée à une valeur, dans ce cas-là 5. En pratique,
cela signifie que '$a = 5' est une expression qui a pour valeur 5. Donc,
écrire '$b = ($a = 5)' revient à écrire '$a = 5; $b = 5;'
(un point virgule marque la fin d'une instruction). Comme les assignations sont
analysé de droite à gauche, vous pouvez aussi bien écrire
'$b = $a = 5'.
Un autre bon exemple du langage orienté expression est la
pré-incrémentation et la post-incrémentation, (ainsi que
la décrémentation). Les utilisateurs de PHP/FI 2
et ceux de nombreux autres langages sont habitués à
la notation "variable++" et "variable--". Ce sont les opérateurs
d'incrémentation et de décrémentation. En PHP/FI 2,
l'instruction '$a++' n'a aucune valeur (c'est-à-dire que ce n'est pas
une expression) et vous ne pouvez donc pas l'utiliser. PHP ajoute les
possibilités d'incrémentation et de décrémentation
comme c'est le cas dans le langage C. En PHP, comme en C, il y a deux types
d'opérateurs d'incrémentation (pré-incrémentation et
post-incrémentation). Les deux types d'opérateur
d'incrémentation jouent le même rôle (c'est-à-dire qu'ils
incrémentent la variable). La différence vient de la valeur de
l'opérateur d'incrémentation. L'opérateur de
pré-incrémentation, qui s'écrit '++$variable', évalue
la valeur incrémentée (PHP incrémente la variable
avant de lire la valeur de cette variable, d'où le nom de
'pré-incrémentation'). L'opérateur de post-incrémentation,
qui s'écrit '$variable++', évalue la valeur de la variable
avant de l'incrémenter (PHP incrémente la variable après
avoir lu sa valeur, d'où le nom de 'post-incrémentation').
Un type d'expression très commun est l'expression de comparaison. Ces expressions
sont évaluées à 0 ou 1, autrement dit FALSE ou TRUE (respectivement). PHP supporte
les opérateurs de comparaison > (plus grand que), => (plus grand ou égal),
== (égal à), < (plus petit que), <= (plus petit ou égal). Ces expressions sont
utilisées de manière courante dans les instructions conditionnelles, comme l'instruction
if.
Pour le dernier exemple d'expression, nous allons parler des combinaisons
d'opérateurs/assignation. Vous savez que si vous voulez incrémenter la variable
$a d'une unité, vous devez simplement écrire '$a++'. Mais si vous voulez ajouter
la valeur '3' à votre variable ? Vous pouvez écrire plusieurs fois '$a++', mais ce
n'est pas la meilleure des méthodes. Un pratique plus courante est d'écrire
'$a = $a + 3'. L'expression '$a + 3' correspond à la valeur $a plus 3, et est
de nouveau assignée à la variable $a. Donc, le résultat est
l'incrémentation de 3 unités. En PHP, comme dans de nombreux autres
langages comme le C, vous pouvez écrire cela de manière plus concise,
manière qui avec le temps se révélera plus claire et plus rapide
à comprendre. Ajouter 3 à la valeur de la variable $a
peut s'écrire '$a += 3'. Cela signifie précisément : "on prend la valeur
de la variable $a, on ajoute la valeur 3 et on assigne cette valeur à
la variable $a". Et pour être plus concis et plus clair, cette expression est
plus rapide. La valeur de l'expression '$a += 3', comme l'assignation d'une valeur
quelconque, est la valeur assignée. Il est à noter que ce n'est pas 3 mais la
combinaison de la valeur de la variable $a plus la valeur 3. (c'est la valeur qui
est assignée à la variable $a). N'importe quel opérateur binaire
peut utiliser ce type d'assignation, par exemple '$a -= 5' (soustraction de 5 de
la valeur de la variable $a), '$b *= 7' (multiplication de la valeur de la variable $b par 7).
Il y a une autre expression qui peut paraître complexe si vous ne l'avez pas
vueà-dire dans d'autre langage, l'opérateur conditionnel ternaire:
<?php
$first ? $second : $third
?>
Si la valeur de la première sous-expression est vraie
(différente de 0), alors la deuxième sous-expression est
évaluée et constitue le résultat de l'expression
conditionnelle. Sinon, c'est la troisème sous-expression qui est
évaluée et qui constitue le résultat de l'expression.
Les exemples suivants devraient vous permettre de mieux comprendre la pré- et post-
incrémentation et le concept des expressions en général:
<?php
function double($i) {
return $i*2;
}
$b = $a = 5; /* assigne la valeur 5 aux variables $a et $b */
$c = $a++; /* post-incrémentation de la variable $a et assignation de
la valeur à la variable $c */
$e = $d = ++$b; /* Pré-incrémentation, et assignation de la valeur aux
variables $d et $e */
/* à ce niveau, les variables $d et $e sont égales à 6 */
$f = double($d++); /* assignation du double de la valeur de $d à la variable $f ($f vaut 12),
puis incrémentation de la valeur de $d */
$g = double(++$e); /* assigne deux fois la valeur de $e après
incrémentation, 2*7 = 14 to $g */
$h = $g += 10; /* Tout d'abord, $g est incrémentée de 10, et donc $g vaut 24.
Ensuite, la valeur de $g, (24) est assignée à la variable $h,
qui vaut donc elle aussi 24. */
?>
Au début de ce chapitre, nous avons dit que nous allions décrire les
différents types d'instructions, et donc, comme promis, nous allons voir que
les expressions peuvent être des instructions. Mais, attention, toutes les
expressions ne sont pas des instructions. Dans ce cas-là, une instruction
est de la forme 'expr' ';', c'est-à-dire, une expression suivie par un point-virgule.
L'expression '$b = $a = 5;', '$a = 5' est valide, mais ce n'est pas une instruction en
elle-même. '$b = $a = 5' est une instruction valide.
La dernière chose qui mérite d'être mentionnée est
la véritable valeur des expressions. Lorsque vous faites des tests
sur une variable, dans une boucle conditionnelle par exemple, cela ne vous
intéresse pas de savoir qu'elle est la valeur exacte de l'expression.
Mais vous voulez seulement savoir si le résultat signifie
TRUE ou FALSE.
Les constantes TRUE et FALSE
sont les deux valeurs booléennes (respectivement vrai et faux). Lorsque
c'est nécessaire, une expression est automatiquement convertie en
booléen. Reportez-vous à la section à propos du
transtypage pour plus de détails.
PHP propose une implémentation complète et détaillée des
expressions. PHP documente toutes ses expressions dans le manuel que vous êtes
en train de lire. Les exemples qui vont suivre devraient vous donner une bonne
idée de ce qu'est une expression et comment construire vos propres expressions.
Dans tout ce qui va suivre, nous écrirons expr pour
indiquer toute expression PHP valide.
Sommaire:
7.4 Les expressions