Les expressions

Les expressions sont la partie la plus importante de 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;
}
?>

En supposant que vous �tes familiers 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 quatre types de variables scalaires : les valeurs enti�res (entier), les nombres � virgule flottante (float), les cha�nes de caract�res (cha�ne de caract�res) et les bool�ens (boolean). (une variable scalaire est une variable que vous ne pouvez pas scinder en morceaux, 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 jeu 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�es de droite � gauche, vous pouvez aussi bien �crire '$b = $a = 5'.

Un autre bon exemple du langage orient� expression est la pre-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 (pre-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 pre-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 pre-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++' ou '++$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 de la variable $a. 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 dans d'autres langages, l'op�rateur conditionnel ternaire :

<?php
$first 
$second $third
?>

Si la valeur de la premi�re sous-expression est vraie (TRUE) (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 troisi�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 pre-incr�mentation, la 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;     /* Pre-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 quelle 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 (insensible � la casse) sont les deux valeurs possibles pour un bool�en. Lorsque n�cessaire, une expression est automatiquement convertie en bool�en. Lisez la section sur le 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.