2 - Les opérateurs - Les clefs du PHP

Les opérateurs de contrôle d’erreur
En PHP, les erreurs sont signalées sur la page directement avec le nom du
fichier et le numéro de ligne d’où l’erreur provient. Nous verrons dans le
chapitre Mettre de l’ordre que le numéro de la ligne ou le nom du fichier
peuvent être différents de celui qui est indiqué pour des raisons que nous
éclaircirons, mais en général il est assez précis. Par contre, nous n’avons
pas forcément intérêt à ce qu’un visiteur y accède. C’est pourquoi avant
de mettre en ligne vos pages, vous ferez des tests approfondis puis
utiliserez l’opérateur @. Il est collé devant une fonction.

Nous l’utilisons surtout pour les fonctions de connexion avec les bases de
données. Voici par exemple une fonction que nous verrons dans le chapitre
suivant :

$resultat=@mysql_db_query($dbname,$sql,$id_link);

Sans cet opérateur, il suffit que la base soit momentanément indisponible
pour obtenir des messages disgracieux.


Programmation debutant PHP , MySQL , CSS
Affıchage d’une erreur
Il vaut mieux contrôler l’erreur et écrire un message personnalisé. Nous verrons cela dans le chapitre Mettre de l’ordre.

Aucune partie du programme ne sera exécutée si une erreur est décelée par le compilateur.
 C’est un avantage car un programme tronqué peut être dangereux et générer par exemple des boucles infinies. Il faut préciser que PHP possède des garde-fous. Si le programme met plus de 30 secondes pour s’exécuter, il est arrêté. Le temps maximum d’exécution est indiqué à la rubrique max_execution_time dans le fichier créé par la commande phpinfo(). Attention toutefois de n’utiliser cet opérateur qu’une fois vos programmes finalisés. Autrement, certaines parties pourraient ne pas s’exécuter, à votre insu.

Les opérateurs unaires
PHP permet d’incrémenter ou de décrémenter une variable numérique ou une chaîne de caractères.

Il s’écrit ++$a, $a++ ou −−$a et $a−−.

Les variables affublées de ++ s’incrémentent elles-mêmes de 1 tandis que
celles sur lesquelles est appliqué −− se décrémentent de 1.
Selon que les opérateurs sont placés avant ou après, la variable prend la
nouvelle valeur avant ou après. Voici un exemple :

$a=2;
echo ++$a; // affichera 3
//maintenant $a vaut 3;
echo $a; // affichera 3
echo $a++; // affichera 3
echo $a; // affichera 4

L’opérateur −− se comporte de la même façon.

En ce qui concerne les caractères, vous pouvez utiliser l’opérateur unaire
mais seulement pour incrémenter. C’est parfois très utile. Imaginez que
vous vouliez une clé unique de trois caractères pour une table qui
comprend de nombreuses entrées. Vous pouvez le faire à la main ou
utiliser les lettres avec une boucle et un opérateur unaire. Nous le verrons
dans le chapitre Des algorithmes, des outils et des fonctions. Sur deux
caractères, vous avez 674 possibilités et sur trois, 17574 combinaisons
possibles. Pour les chiffres, vous avez respectivement 99 et 999 combinaisons.


Exemple
Nom
Résultat
$a and $b ou $a && $b
AND (et)
Vrai si $a et $b sont vrais
$a or $b ou $a || $b
OR (ou)
Vrai si $a ou $b, ou les deux, sont vrais
$a xor $b
XOR (ou exclusif)
Vrai si $a ou $b sont vrais,
mais pas les deux ensemble
!$a
NOT (non)
Vrai si $a est faux

Attention, && et and n’ont pas la même précédence, de même pour || et
or, comme nous le voyons ci-dessous.

Priorité des opérateurs
La priorité spécifie la force du lien entre deux membres associés par un
opérateur. Prenons un exemple simple dans les opérateurs arithmétiques.
Le résultat de 8+7*10 sera 78 car la multiplication a priorité sur l’addition,
donc le moteur PHP commencera par multiplier 7 par 10 avant d’additionner
le résultat avec 8.

La façon de forcer la priorité et donc de résoudre ce problème est d’ajouter
des parenthèses. Le résultat de (8+7)*10 sera 150. Attention de ne pas
systématiquement éluder le problème en ajoutant des parenthèses inutiles.

Si c’est moins élégant, les collections de parenthèses peuvent également
devenir illisibles. En cas de doute, la parenthèse est plus simple mais d’un
autre côté, il vaut mieux s’habituer à écrire un code élégant et à tester ses
programmes pour détecter les erreurs. Une fois les nuances assimilées,
vous gagnerez en temps de codage et en lisibilité et aurez la satisfaction
d’avoir un code élégant et maîtrisé.

Voici un tableau représentant les opérateurs dans un ordre de priorité
croissante.
                                         Priorité des opérateurs

Associativité
Opérateur
Gauche
or
Gauche
xor
Gauche
and
Gauche
print
Droite
= += -= *= /= .= %=
Gauche
? :
Gauche
||
Gauche
&&
Gauche
|
Gauche
^
Gauche
&
Non associatif
== != === !==
Non associatif
< <= > >=
Gauche
<< >>
Gauche
+ .
Gauche
* / %
Droite
! ~ ++ −− (int) (double) (string) (array) @

À priorité égale d’opérateurs, l’opération est choisie de la gauche vers la droite, ou vice versa, selon le côté indiqué.

Les opérateurs de chaîne de caractères
Il existe deux opérateurs . et .= que nous avons déjà évoqués dans le
chapitre 2. Vous pouvez également les appliquer à des données numériques :

 Opérateurs de chaînes de caractères : chaine_car.php
<?
$premier=4;
$deux=2;
$type=gettype($deux);
echo "$deux : $type<br>";//affiche 2 un entier
$nombre=$premier.$deux;
$type=gettype($nombre);
echo "$nombre : $type<br>";//affiche 42 une chaîne
$nombre.=3;
$type=gettype($nombre);
echo "$nombre : $type<br>"; //affiche 423 une chaîne de caractères
$type=gettype($nombre);
$nombre+=$nombre;
$type=gettype($nombre);
echo "$nombre : $type<br>"; //affiche 846 un entier
?>

Avec PHP, les données se transforment de manière transparente. PHP a
traité ces nombres comme des caractères qu’il a concaténés. Mais le
résultat est-il un nombre ou une chaîne de caractère ? Ici, nous utilisons la
fonction gettype() pour afficher le type de la donnée.

Les deux premières variables sont des entiers. Ensuite, la variable nombre
devient une chaîne de caractères puis elle redevient un entier.
 Que de métamorphoses ! Le type des données peut varier, il dépend de l’opérateur.
Pour une concaténation, les variables en présence deviennent des
chaînes et dans le cas d’une addition, le chiffre n’est plus un caractère
mais un nombre.


Aucun commentaire:

Enregistrer un commentaire