autre question non documentee : executi on dans une condition
Le
Olivier Masson
ReB,
Encore un problème pour lequel je n'ai pas trouvé de solution dans la doc.
J'ai une condition de ce genre :
if (!copy($foo,$dest) && !copy($bar,$dest))
Ce qui m'évite de faire un accès fichier supplémentaire avec file_exists
avant.
Mais voilà le problème : si la copie de $foo est bien effectuée, je NE
veux PAS que $bar le soit.
D'où ma question (pour savoir si je peux garder une telle condition) :
est-il clair que, lors de l'utilisation d'un OU (||), seule la première
condition est évaluée (ce qui est absolument logique) ?
J'ai testé et c'est bien le cas, mais j'ai toujours peur que PHP me
cache quelque chose
Encore un problème pour lequel je n'ai pas trouvé de solution dans la doc.
J'ai une condition de ce genre :
if (!copy($foo,$dest) && !copy($bar,$dest))
Ce qui m'évite de faire un accès fichier supplémentaire avec file_exists
avant.
Mais voilà le problème : si la copie de $foo est bien effectuée, je NE
veux PAS que $bar le soit.
D'où ma question (pour savoir si je peux garder une telle condition) :
est-il clair que, lors de l'utilisation d'un OU (||), seule la première
condition est évaluée (ce qui est absolument logique) ?
J'ai testé et c'est bien le cas, mais j'ai toujours peur que PHP me
cache quelque chose

Poser une question


Comme souvent, la doc PHP n'est pas très explicite. Pourtant, l'info est
bien donnée dans la doc, dans un *commentaire* d'un *exemple* :
Example #1
// --------------------
// foo() will never get called as those operators are short-circuit
$a = (false && foo());
$b = (true || foo());
$c = (false and foo());
$d = (true or foo());
</>
Note que ce comportement est calqué de celui du C, ce qui est aussi une
grande caractéristique de PHP.
Moi je n'ai jamais trouvé cette syntaxe très lisible, en C comme en PHP. Je
préfère imbriquer deux "if then".
--
Fredchou
mailto:
Chacun ses goûts (et ses habitudes), c'est comme pour l'opérateur
ternaire (« ?: ») que certains trouvent plus lisible que des if alors
que d'autres le trouvent moins lisible.
En ce qui concerne la ligne citée par Olivier Masson (et que j'ai
reprise ci-dessus), presonnellement je la trouve relativement lisible.
Je la lis « si je n'ai pas pu copier $foo en $dest, et que je n'ai pas
pu copier non plus $bar en $dest, alors ... »
Ca dépend de ce que tu mets dans tes conditions. Mais c'est vrai que
c'est surtout utile en C, pour vérifier un pointeur puis de faire un
test derrière sur ce pointeur.
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Merci pour ta précision documentée.
En fait, je trouve que ça tombe sous le sens, donc ça m'est tout à fait
naturel de l'utiliser. Mais n'étant pas développeur, j'ignore encore bcp
des rouages des langages, alors je me méfie.
Et par exemple, PHP me balance parfois des erreurs du style "[...] in
write context" ou encore veut absolument retourner quelque chose sans
que je puisse lui dire de se taire.