Chapitre 10. Les expressions

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 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 ( PHP n'a pas de type booléen ) . La véritable valeur d' une expression en PHP est calculée de la même manière qu 'en Perl . Toute valeur numérique différente de 0 est considérée comme étant TRUE . Une chaîne de caractères vide et la chaîne de caractère 0 sont considérées comme FALSE . Toutes les autres valeurs sont vraies . Avec les types de variables non-scalaires ( les tableaux et les objets) , s 'ils ne contiennent aucun élément , renvoient FALSE , sinon , ils renvoient TRUE .

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 .