OVH Cloud OVH Cloud

Documentation PHP

12 réponses
Avatar
Pierre Maurette
Bonjour,
Je tombe souvent sur des expressions comme:
$Links = mysql_query($query_Links, $assembleur) or die(mysql_error());
(celle-ci est générée par Dreamweaver, mais on la retrouve dans
beaucoup d'exemples)
Je suppose, je suis même certain, que l'expression sera évaluée de
gauche à droite, avec arrêt de l'évaluation dès que le résultat est
connu (court-circuit) comme en C.
Ce qui m'embête, c'est que je ne trouve nulle part de document normatif
me garantissant ce comportement. J'utilise:
http://fr.php.net/manual/fr/index.php
J'ai mal cherché ? Y a-t-il un autre document ?
Merci d'avance

--
Pour répondre directement: enlever une lettre sur deux
wwaannaaddoooo -> wanadoo

Pierre Maurette

2 réponses

1 2
Avatar
John GALLET
Re,

[...] la syntaxe "or" ne fonctionne qu'avec "or die()", on ne
peut pas par exemple écrire if($machin==1 or $bidule==4)
Pourquoi ça ?



Parce que rien du tout, c'est même explicitement sur
http://fr2.php.net/manual/en/language.operators.logical.php

Je me souviens d'avoir corrigé un gag dans un script en remplaçant
l'instruction "or" par un test explicite, mais c'était quoi ? J'avais
souvenir d'une parse error... "on" avait conclu à ce moment là (à tord
donc) que or était réservé à "or die()". Etait-ce avec un appel de
fonction ?? Je vais essayer de retrouver.

JG


Avatar
Antoun
Je m'étais également posé la question quand j'ai découvert cette
syntaxe. Je ne l'ai effectivement nulle part vue décrite explicitement,
même si elle est abondamment utilisée dans les exemples.

Ceci dit, elle est une conséquence logique du modèle "orienté
expression" et de la basse priorité du or : mysql_query(...) est une
expression qui est vraie si elle réussit. Donc avec une écriture

Expr1 or Expr2

si Expr1 est vraie, il est inutile d'évaluer Expr2 puisque l'ensemble
sera de toute façon vrai.

De la même manière, on peut utiliser and pour remplacer un if suivi
d'une seule instruction :

mysql_query(...) and echo "requête réussie" ;

est l'équivalent de :

if (mysql_query(...) ) echo "requête réussie" ;

Ce n'est pas forcément une bonne idée, en particulier pour des questions
de lisibilité...
1 2