Les opérateurs

Rechercher

Les opérateurs

  • Par Emacs
  • 12 commentaires
  • 28405 lectures
  • RSS -  Atom

Le tutoriel qui va suivre n'est pas tout à fait un cours mais plutôt un mémo concernant les opérateurs PHP. Il en existe 12 types au total. Nous allons les passer en revue au moyen de tableaux de synthèse. Commençons tout d'abord par les opérateurs arithmétiques.

Les opérateurs arithmétiques

Les opérateurs arithmétiques permettent de réaliser des opérations mathématiques sur les variables. Ce sont naturellement toutes les opérations conventionnelles telles que l'addition, la multiplication, la soustraction ou la division. Le tableau suivant résume toutes les opérations mathématiques possibles.

Les opérateurs arithmétiques
Opérateur Opération Exemple Résultat
Les opérateurs arithmétiques
- Négation -$a Opposé de $a
+ Addition $a + $b Somme de $a et $b
* Multiplication $a * $b Produit de $a et $b
- Soustraction $a - $b Différence de $a et $b
/ Division $a / $b Quotient de $a et $b
% Modulo $a % $b Reste de $a / $b

Note : l'opérateur modulo retourne le reste de la division entre deux nombres. Son utilisation permet par exemple de déterminer la parité d'un nombre ou bien de réaliser une alternance de couleurs des lignes d'un tableau HTML.

Les opérateurs d'incrémentation / décrémentation

L'opérateur d'incrémentation (respectivement décrémentation) permet d'augmenter (respectivement diminuer) d'une unité la valeur de la variable. On les utilise essentiellement dans les boucles pour mettre à jour la valeur du compteur à chaque itération.

Les opérateurs d'incrémentation / décrémentation
Opérateur Opération Exemple Résultat
Les opérateurs d'incrémentation / décrémentation
++ Pré-Incrémentation ++$a Incrémente $a, puis retourne $a
++ Post-Incrémentation $a++ Retourne $a, puis incrémente $a
-- Pré-Décrémentation --$a Décrémente $a, puis retourne $a
-- Post-Décrémentation $a-- Retourne $a, puis décrémente $a

Ces opérateurs peuvent être placés soit devant la variable ou bien après celle-ci. Cette nuance peut-être intéressante lors de l'utilisation de boucle.

En règle générale, les cas d'utilisation font que l'on emploie plus $a++ (respectivement $a--).

L'opérateur d'assignation

C'est sans doute l'opérateur le plus élémentaire et essentiel du langage PHP. C'est grâce à lui que l'on affecte une valeur à une variable, que l'on crée un tableau ou bien que l'on instancie une classe.

L'opérateur d'affectation
Opérateur Opération Exemple Résultat
L'opérateur d'affectation
= Assignation $a = 3 Affecte la valeur 3 à $a

Les opérateurs de chaine de caractères

Ils sont au nombre de deux. Le premier est l'opérateur de concaténation réalisé par le point (.) tandis que le second est l'opérateur d'assignation concaténant par le .=

Les opérateurs de chaîne de caractères
Opérateur Opération Exemple Résultat
Les opérateurs de chaîne de caractères
. Concaténation $a . $b Concatène les valeurs de $a et $b
.= Assignation concaténant $a .= $b Ajoute la valeur de $b à la suite de celle de $a

Les opérateurs de comparaison

Ils sont essentiellement utilisés dans les structures conditionnelles (if, elseif, else, for, while...) afin de comparer des valeurs entre elles. Ses tests renverront TRUE (vrai) si la comparaison est juste ou bien FALSE (faux) si la comparaison est fausse.

Les opérateurs de comparaison
Opérateur Opération Exemple Résultat
Les opérateurs de comparaison
== Egalité en valeur $a == $b Vérifie que les valeurs de $a et $b sont identiques
=== Egalité en valeur et type $a === $b Vérifie que les valeurs et types de $a et $b sont identiques
!= Différence en valeur $a != $b Vérifie que les valeurs de $a et $b sont différentes
!== Différence en valeur et type $a !== $b Vérifie que les valeurs et types de $a et $b sont différents
<> Différence en valeur $a <> $b Alias de !=
< Infériorité stricte $a < $b Vérifie que $a est strictement inférieur $b
<= Infériorité ou égalité $a <= $b Vérifie que $a est strictement inférieur ou égal à $b
> Supériorité stricte $a > $b Vérifie que $a est strictement supérieur $b
>= Supériorité ou égalité $a >= $b Vérifie que $a est strictement supérieur ou égal à $b

Note : il ne faut pas confondre l'opérateur d'affectation qui s'emploie avec un seul signe égal (=) et qui permet de fixer la valeur d'une variable.

Lorsque l'on souhaite comparer à la fois les valeurs et les types des variables, on utilise l'opérateur === (respectivement !==). Cette vérification est conseillée pour deux raisons :

  • On s'assure que les deux variables sont du même type.
  • Cette opération est légèrement plus rapide à l'exécution que sa consoeur qui ne fait pas de vérification sur le type.

Illustrons la nuance entre les deux formes de comparaison :

Test de comparaison sur les variables
<?php
$a = '2'; // Type string
$b = 2; // Type entier
$c = 2; // Type entier
// Comparaison sur les valeurs
if($a == $b)
{
echo '$a et $b ont la même valeur !';
}
// Comparaison sur les valeurs et les types
if($a === $c)
{
echo '$a et $c sont de même valeur et de même type !';
}
?>

Ces deux exemples introduisent la notion de structures de contrôle par condition que nous étudierons au prochain tutoriel. Nous avons déclaré 3 variables de valeur identique 2. Seule $a est de type string (chaine de caractères) tandis que les deux autres sont de type entier (int). Lorsque l'on exécute ces deux tests, nous constatons que seul le premier affiche le message. C'est parce que le double signe égal ne s'assure pas que le type des deux variables est le même contrairement au triple signe égal.

En toute logique, une chaine de caractères ne devrait pas être "égale" à un entier. Ce serait comme comparer des torchons et des serviettes !!! On s'aperçoit ici d'une faiblesse de PHP en terme de typage des variables, et c'est donc pour cette raison que l'on parle de typage faible dans le langage PHP.

Nous vous conseillons donc dans la mesure du possible de vérifier vos valeurs à la fois sur les types et sur les valeurs.

Astuce : PHP introduit la fonction intval() qui permet de faire du transtypage (ou cast). Elle transforme par exemple un entier sous forme de chaine de caractères en entier naturel.

Les opérateurs logiques

Les opérateurs logiques sont très souvent utilisés dans les structures de contrôle. Elles permettent de définir des expressions plus ou moins complexes qui renverront un booléen TRUE ou FALSE. Ci-dessous un tableau synthétique de ces opérateurs.

Les opérateurs logiques
Opérateur Opération Exemple Résultat
Les opérateurs logiques
&& ET $a && $b TRUE si $a ET $b sont vrais
AND ET $a AND $b Alias de &&
|| OU $a || $b TRUE si $a OU $b est vrai
OR OU $a OR $b Alias de ||
XOR OU exclusif $a XOR $b TRUE si $a OU $b est vrai mais pas les deux
! NON !$a TRUE si $a est faux

La différence entre AND et && (respectivement OR et ||) réside dans la priorité d'exécution. Les opérateurs && et || ont une priorité plus élevée par rapport à leur semblable litéral respectif.

Les opérateurs binaires (bitwise)

Ces opérateurs permettent de manipuler les bits dans un entier. Si les paramètres de gauche et de droite sont des chaines de caractères, l'opérateur de bits agira sur les valeurs ASCII de ces caractères. (extrait de la documentation officielle).

Les opérateurs binaires
Opérateur Opération Exemple Résultat
Les opérateurs binaires
& ET $a & $b Les bits positionnés à 1 dans $a ET $b sont positionnés à 1
| OU $a | $b Les bits positionnés à 1 dans $a OU $b sont positionnés à 1
^ OU exclusif $a ^ $b Les bits positionnés à 1 dans $a OU dans $b mais pas dans les deux sont positionnés à 1
~ NON $a ~ $b Les bits qui sont positionnés à 1 dans $a sont positionnés à 0, et vice versa
<< Décalage à gauche $a << $b Décale les bits de $a, $b fois sur la gauche (chaque décalage équivaut à une multiplication par 2)
>> Décalage à droite $a >> $b Décalage des bits de $a, $b fois par la droite (chaque décalage équivaut à une division par 2)

Pour plus d'information concernant les opérateurs binaires, nous vous invitons à lire les exemples de la documentation officielle : les opérateurs binaires.

Les opérateurs combinés

Les opérateurs combinés sont des opérateurs mêlant opération arithmétique ou binaire avec une assignation. D'où la notion de combinaison. Le tableau suivant résume tous ces opérateurs.

Les opérateurs combinés
Opérateur Opération Exemple Résultat
Les opérateurs combinés
+= Addition $a += 4 Ajoute 4 à la valeur de $a et stocke le résultat dans $a
-= Soustraction $a -= 4 Soustrait 4 à la valeur de $a et stocke le résultat dans $a
*= Multiplication $a *= 4 Multiplie par 4 la valeur de $a et stocke le résultat dans $a
/= Division $a /= 4 Divise par 4 la valeur de $a et stocke le résultat dans $a
%= Modulo $a %= 4 Calcule le reste de la division de $a par 4 et stocke le résultat dans $a
&= ET binaire $a &= $b Egal à $a = $a & $b
|= OU binaire $a |= $b Egal à $a = $a | $b
^= XOR binaire $a ^= $b Egal $a = $a ^ $b
<<= Décalage à gauche $a <<= $b Egal à $a = $a << $b
>>= Décalagae à droite $a >>= $b Egal à $a = $a >> $b

En généralisant le tout, on obtient $a (opérateur)= $b qui est aussi équivalant à $a = $a (opérateur) $b.

L'opérateur de contrôle d'erreur

C'est l'opérateur arobase (@) qui permet de supprimer toutes les erreurs générées par une expression (fonction, variables, constantes...). On le place juste devant l'expression pour laquelle on souhaite masquer l'erreur qui est levée.

L'opérateur arobase
Opérateur Opération Exemple Résultat
L'opérateur arobase
@ Erreur @include('fichier.php') Masque l'erreur générée par la fonction include()

Néanmoins cette pratique est vivement déconseillée car on ne devrait pas masquer une erreur générée mais au contraire il faut la traiter. Cependant il existe des cas très particuliers où l'emploi de cette technique se révèle utile. Par exemple, lorsque l'on utilise la fonction fsockopen().

L'opérateur d'exécution

Cet opérateur, délimité par des apostrophes ou guillemets obliques, permet d'exécuter des commandes Shell. Il se comporte de la même manière que la fonction shell_exec(). Si celle-ci est désactivée ou si le safe mode est activé alors cet opérateur ne fonctionnera pas par mesure de sécurité (sur les hébergements mutualisés par exemple).

L'opérateur d'exécution
Opérateur Opération Exemple Résultat
L'opérateur d'exécution
` ` Commande Shell `ifconfig` Exécute la commande shell et retourne le résultat

Le résultat d'une commande shell exécutée peut-être restitué aussi bien sur la sortie standard que dans une variable. Illustration par un exemple issu de la documentation officielle de l'opérateur d'exécution.

Utilisation de l'opérateur d'exécution
<?php
$output = `ls -al`;
echo "<pre>$output</pre>";
?>

Les opérateurs sur les tableaux

Comme pour les chaines de caractères, PHP propose une série d'opérateurs permettant de manipuler les tableaux. Ces opérateurs sont les mêmes que les opérateurs de comparaison mais n'ont pas forcément la même fonction et la même signification.

Les opérateurs de comparaison
Opérateur Opération Exemple Résultat
Les opérateurs de comparaison
+ Union $a + $b Union de $a et $b
== Egalité $a == $b TRUE si $a et $b contiennent les mêmes paires clé / valeur
=== Identique $a === $b TRUE si $a et $b contiennent les mêmes paires clé / valeur dans le même ordre et de même type
!= Inégalité $a != $b TRUE si $a et $b ne sont pas égaux
<> Inégalité $a <> $b Alias de !=
!== Non identique $a !== $b TRUE si $a et $b ne sont pas identiques

Pour plus d'informations au sujet des opérateurs sur les tableaux, nous vous invitons à consulter la documentation officielle : les opérateurs sur les tableaux.

Les opérateurs de type d'objet (instance of)

L'opérateur de type d'objet (instanceof = « instance de ») est utilisé en programmation orientée objet afin de déterminer si un objet, son parent et ses classes dérivées sont de même type ou non.

L'opérateur de type d'objet
Opérateur Opération Exemple Résultat
L'opérateur de type d'objet
instanceof Instance $a instanceof B TRUE si $a est une instance de la classe B

Prenons un exemple simple pour illustrer ce concept.

Utilisation de l'opérateur instanceof
<?php
// Déclaration de classes
class Etudiant { }
class Professeur { }
// Instanciation d'un objet de type Etudiant
$hugo = new Etudiant();
// Test du type de l'objet
if($hugo instanceof Etudiant) {
echo 'Hugo est un étudiant !';
}
else
{
echo 'Hugo est un professeur !';
}
?>

Dans notre exemple, on crée un objet $hugo de type Etudiant ( = instance d'une classe Etudiant). Puis on teste si cet objet est de type Etudiant grâce à l'opérateur instanceof. Si le test renvoie TRUE alors $hugo est de type Etudiant, sinon il est de type Professeur.

La priorité des opérateurs

Comme en mathématiques, les opérateurs ont un ordre de priorité entre eux lorsqu'ils sont exécutés. Le tableau qui suit résume chacune des priorités de ces opérateurs.

Les priorités entre opérateurs
Priorité Opérateur
Les priorités entre opérateurs
1 new
2 () et []
3 -- ++ et !
4 ~ - (int) (float) (string) (array) (object) @
5 instanceof
6 * / et %
7 + - et .
8 << et >>
9 < <= et >= >
10 == != et ===
11 &
12 ^
13 |
14 &&
15 ||
16 ? et :
17 Affectation et opérateurs combinés
18 AND
19 XOR
20 OR

Conclusion

Ce tutoriel ou mémo s'achève ici. Nous avons fait le tour des opérateurs du langage PHP. Les opérateurs d'affectation, logique et de comparaison sont les trois qu'il faut connaître sur le bout des doigts car ce sont les plus utilisés.



Les commentaires

1. Par saturn1 le 27/12/2007 19:33

Juste une petite question c'est quoi la différence entre .= Assignation concaténant. et la concaténation ?
Ty

2. Par Emacs le 27/12/2007 21:09

C'est pareil.

Soit tu fais :

- $identite = 'Pierre '. $nom;

Ou bien :

- $identite = 'Pierre';
- $identite.= ' '. $nom;

++

3. Par saturn2 le 06/01/2008 10:59

ok, merci !!

4. Par shark le 24/05/2008 21:59

merci !

5. Par yann le 09/12/2008 14:48

Bonjour,
Un opérateur qui n'est pas apparemment recensé dans votre article et dont je n'arrive pas à voir la signification : -> ou <-
merci,

6. Par Emacs le 10/12/2008 00:46

Hum, de quel opérateur parles-tu exactement ? L'opérateur d'appel de méthode sur un objet ?

ex: $toto->doSomething();

C'est de celui-ci dont tu parles ?

7. Par test le 16/12/2008 15:57

Dans le Test de comparaison sur les variables, pour moi, le deuxième booléen est à FALSE puisqu'on fait une comparaison sur les types, non ?

8. Par Emacs le 16/12/2008 18:15

Oui c'est exact, je corrige le tutoriel ce soir.

9. Par popies le 22/07/2009 09:27

Ca ne serait pas plutôt shell_exec() au lieu de shel_exex()? En tout cas le lien renvoi vers shell_exec()

10. Par Emacs le 22/07/2009 23:48

Merci c'est corrigé

11. Par Haithem le 04/08/2009 12:54

Que signifie l'opérateur "=&"
NB: Je parle pas de "&="
Merci

12. Par Emacs le 04/08/2009 13:28

Le symbole =& n'est rien de plus qu'un opérateur d'affectation qui servait en PHP 4 à affecter un objet par référence à une variable. En effet, en PHP 4, les objets étaient copiés. En utilisant le = &, cela servait à forcer une référence à l'objet dans la variable et non une copie. Mais depuis PHP 5, tous les objets sont traités comme des références, donc il n'est plus nécessaire d'avoir recours à cette syntaxe.