autre question non documentee : executi on dans une condition
7 réponses
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...
Note que ce comportement est calqué de celui du C, ce qui est aussi une grande caractéristique de PHP.
Fredchou
> 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:
> 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:fredchou@nospam.free.fr.invalid
> 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:
Olivier Miakinen
Le 08/01/2010 18:49, Fredchou me répondit :
[à propos de « if (!copy($foo,$dest) && !copy($bar,$dest)) »]
Moi je n'ai jamais trouvé cette syntaxe très lisible, en C comme en PHP. Je préfère imbriquer deux "if then".
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 ... »
Le 08/01/2010 18:49, Fredchou me répondit :
[à propos de « if (!copy($foo,$dest) && !copy($bar,$dest)) »]
Moi je n'ai jamais trouvé cette syntaxe très lisible, en C comme en PHP. Je
préfère imbriquer deux "if then".
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 ... »
[à propos de « if (!copy($foo,$dest) && !copy($bar,$dest)) »]
Moi je n'ai jamais trouvé cette syntaxe très lisible, en C comme en PHP. Je préfère imbriquer deux "if then".
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 ... »
Mickael Wolff
Fredchou a écrit :
Moi je n'ai jamais trouvé cette syntaxe très lisible, en C comme en PHP. Je préfère imbriquer deux "if then".
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.
Moi je n'ai jamais trouvé cette syntaxe très lisible, en C comme en PHP. Je
préfère imbriquer deux "if then".
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.
Moi je n'ai jamais trouvé cette syntaxe très lisible, en C comme en PHP. Je préfère imbriquer deux "if then".
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.
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 ... »
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.
Le 08/01/2010 19:39, Olivier Miakinen a écrit :
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 ... »
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.
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 ... »
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.
Pierre Maurette
Olivier Masson, le 09/01/2010 a écrit :
Le 08/01/2010 19:39, Olivier Miakinen a écrit :
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 ... »
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.
Je fais peu de PHP, et j'ai l'habitude dans tous les langages d'utiliser si possible l'évaluation économique (paresseuse, minimale) des booléens, qui me donne des trucs que je trouve très lisibles. J'avais remarqué que l'évidence dont vous parlez n'était pas vraiment reprise dans la documentation, et j'avais fait comme vous, poser la question sur usenet. Je résume à toutes fins utiles ce que je pense à retenir pour PHP. L'évaluation économique consiste à garantir une évaluation de gauche à droite, et ensuite l'arrêt de l'évaluation dès que le résultat est connu. Bout de test:
function f1(){print "f1n";return FALSE;} function f2(){print "f2n";return TRUE;}
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.
Le @ ne le fait pas ?
-- Pierre Maurette
Olivier Masson, le 09/01/2010 a écrit :
Le 08/01/2010 19:39, Olivier Miakinen a écrit :
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 ... »
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.
Je fais peu de PHP, et j'ai l'habitude dans tous les langages
d'utiliser si possible l'évaluation économique (paresseuse, minimale)
des booléens, qui me donne des trucs que je trouve très lisibles.
J'avais remarqué que l'évidence dont vous parlez n'était pas vraiment
reprise dans la documentation, et j'avais fait comme vous, poser la
question sur usenet.
Je résume à toutes fins utiles ce que je pense à retenir pour PHP.
L'évaluation économique consiste à garantir une évaluation de gauche à
droite, et ensuite l'arrêt de l'évaluation dès que le résultat est
connu. Bout de test:
function f1(){print "f1n";return FALSE;}
function f2(){print "f2n";return TRUE;}
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.
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 ... »
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.
Je fais peu de PHP, et j'ai l'habitude dans tous les langages d'utiliser si possible l'évaluation économique (paresseuse, minimale) des booléens, qui me donne des trucs que je trouve très lisibles. J'avais remarqué que l'évidence dont vous parlez n'était pas vraiment reprise dans la documentation, et j'avais fait comme vous, poser la question sur usenet. Je résume à toutes fins utiles ce que je pense à retenir pour PHP. L'évaluation économique consiste à garantir une évaluation de gauche à droite, et ensuite l'arrêt de l'évaluation dès que le résultat est connu. Bout de test:
function f1(){print "f1n";return FALSE;} function f2(){print "f2n";return TRUE;}
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.
Le @ ne le fait pas ?
-- Pierre Maurette
Olivier Masson
Le 12/01/2010 08:50, Pierre Maurette a écrit :
Attention, si on utilise les opérateurs bitwise & et |, on forcera à l'évaluation complète, ce qui peut être utile:
en effet.
Le @ ne le fait pas ?
Il me semble que c'est une fatale.
Le 12/01/2010 08:50, Pierre Maurette a écrit :
Attention, si on utilise les opérateurs bitwise & et |, on forcera à
l'évaluation complète, ce qui peut être utile: