J'ai une fonction :
function getMilk() {
if($condition == true)
return "Milk for you, madam";
return false;
}
Exemple 1 :
if(getMilk())
echo getMilk();
Le premier exemple fait-il courir PHP deux fois après le lait ?
Exemple 2 :
echo getMilk(); // don't check for milk first, just get it if they have it
Si j'étais PHP, j'opterais plutôt pour le deuxième exemple. Ainsi, je n'aurais pas à courir jusqu'au magasin pour vérifier s'il y a du lait, puis à courir une fois de plus pour l'obtenir.
L'exemple 2 serait-il plus rapide/meilleur, ou cela n'a-t-il pas d'importance ?
2 votes
Oui, la première approche exécutera la fonction deux fois, mais la différence de performance sera négligeable dans ce cas.
0 votes
Il n'y a pas de ligne trop de lait pour une madame =)
5 votes
Pourquoi ne pas faire écho à getMilk tout le temps mais renvoyer '' si faux ?
8 votes
Au lieu de cela, vous l'affectez à une variable et vous vérifiez avec la variable
$x = getMilk();
if($x) echo $x;
dans ce cas, la fonction n'est appelée qu'une seule fois.4 votes
Essayer
if($milk = getMilk()) echo $milk;
ce qui appelleragetMilk()
une seule fois0 votes
Ok, il y a donc une différence de performance, dans ce cas seulement théorique. Mais que se passerait-il si la fonction était
getEntireHeardOfCowsCheckingWhoHasMilk()
Dans ce cas, je ne devrais l'exécuter qu'une seule fois, n'est-ce pas ?12 votes
La performance n'est pas la seule raison d'éviter d'appeler deux fois la même fonction. Certaines fonctions ne renvoient pas le même résultat si vous les appelez plusieurs fois. Il existe également des fonctions ayant des effets secondaires que vous n'utiliserez probablement qu'une seule fois.
0 votes
echo $condition ? 'Milk for you, madam' : ''
0 votes
Oui ! PHP appellera la fonction deux fois, parce que la condition peut avoir changé depuis le dernier appel ; peut-être pas dans cet exemple trivial, mais dans la plupart des exemples du monde réel, c'est possible. PHP fera ce que vous lui demandez, et ne commencera pas à vous faire des reproches. C'est ainsi que cela devrait être.