If ou switch, lequel choisir


sff
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 336
Inscription: 2 Fév 2005

If ou switch, lequel choisir

Message le Dim Fév 10, 2008 0:32

Bonjours, dans mon code php, j'ai une série de IF qui vérifie s'il y a des erreurs après la validation d'un formulaire. En voici un exemple.
Code: Tout sélectionner
extract($_POST);
      $errors = 0;
      $errorlist = "";
      if (trim($title) == "") { $errors++; $errorlist .= "- Le titre du téléchargement est exigé.<br>"; }
      if (trim($url) == "") { $errors++; $errorlist .= "- L'url du téléchargement est exigé.<br>"; }
      if (trim($count) == "") { $errors++; $errorlist .= "- Le compteur du téléchargement est exigé.<br>"; }
      if (trim($picture) == "") { $errors++; $errorlist .= "- L'url de l'image du téléchargement est exigé.<br>"; }
      if (trim($content) == "") { $errors++; $errorlist .= "- La description du téléchargement est exigé.<br>"; }
ETC


J'aimerai savoir si c'est préférable de remplacer les if par un switch (sans le break), ou est ce que ca revient au meme dans ce cas.

Ca me donnerai un truc de ce genre:

Code: Tout sélectionner
      extract($_POST);
      $errors = 0;
      $errorlist = "";
      
      switch (true) {
      case (trim($title) == ""): $errors++; $errorlist .= "- Le titre du téléchargement est exigé.<br>";
      case (trim($url) == ""): $errors++; $errorlist .= "- L'url du téléchargement est exigé.<br>";
ETC


D'habitude je sais qu'un switch est plus éfficace quand il y a une multitude de elseif, mais ici avec des simple if en série, est nécéssaire. Merci pour ceux qui m'apporteront des précisions.


Serious
WRInaute passionné
WRInaute passionné
 
Messages: 2438
Inscription: 21 Nov 2005

Message le Dim Fév 10, 2008 4:41

if


KOogar
WRInaute accro
WRInaute accro
 
Messages: 3974
Inscription: 16 Nov 2004

Message le Dim Fév 10, 2008 7:39

Serious a écrit:if


va + vite ??


arnaudmn
WRInaute passionné
WRInaute passionné
 
Messages: 1542
Inscription: 11 Mai 2005

Message le Dim Fév 10, 2008 9:31

Ce que tu as écris n'est pas équivalent :)
Avec un switch sans break, si title="", tu va avoir errors=5, quelque soit le contenu des autres variables.
Plutot qu'un long discourt, voir http://www.php.net/switch (la partie 3).

Sinon, switch ou if, dans le cas général, ça a le même résultat. Faut toujours mettre le cas le plus fréquent en premier, ça évite les tests inutiles.

deathwish
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 12
Inscription: 2 Fév 2008

Message le Dim Fév 10, 2008 10:42

sur le plan technique ... le switch est plus optimisé car il n'accede qu'une seule fois à la variable et le compare avec chaque case, alors que le if va a chaque fois accéder et comparer les deux variables ...

mais bon je sais pas si c'est intéressant d'optimiser du PHP xD

mais dans votre cas l'utilisation d'un switch est inefficace ... (sur le point de vue de l'optimisation ...)


YoyoS
WRInaute accro
WRInaute accro
 
Messages: 3835
Inscription: 14 Sep 2006

Message le Dim Fév 10, 2008 13:52

On se demande même pourquoi il y a un switch vu qu'on passe partout. Le switch sert justement à choisir la bonne branche et ne pas exécuter le reste 0_o

coolspot
WRInaute discret
WRInaute discret
 
Messages: 90
Inscription: 10 Déc 2007

Message le Dim Fév 10, 2008 15:52

je dirais si tu a plus un if, elseif et else garde cette structure si tu commence à avoir plus de 2,3 else if au milieu il est plus sain de passer au switch car tu grapille quelque micro-seconde de génération.


KOogar
WRInaute accro
WRInaute accro
 
Messages: 3974
Inscription: 16 Nov 2004

Message le Lun Fév 11, 2008 7:07

Il y une difference infime entre if et switch en temps machine, de nombreux tests l'on maintes fois demontrés. On peut au mieux gratter quelque milliemes quand on test le cas le plus fréquent en premier.

On peut donc conclure que c'est idem


mahefarivony
WRInaute accro
WRInaute accro
 
Messages: 11405
Inscription: 14 Oct 2002

Message le Lun Fév 11, 2008 7:55

YoyoS a écrit:On se demande même pourquoi il y a un switch vu qu'on passe partout.

+1


KOogar
WRInaute accro
WRInaute accro
 
Messages: 3974
Inscription: 16 Nov 2004

Message le Lun Fév 11, 2008 8:15

mahefarivony a écrit:
YoyoS a écrit:On se demande même pourquoi il y a un switch vu qu'on passe partout.

+1


ben c'est un code de debutant, vous l'avez jamais été ?


YoyoS
WRInaute accro
WRInaute accro
 
Messages: 3835
Inscription: 14 Sep 2006

Message le Lun Fév 11, 2008 12:54

Eu si bien sure, je dis juste que c'est surtout un manque de logique ici.

Première chose que j'ai appris, le if else.

Ensuite, quand on voit qu'on a trop de if elseif ... pour des choses assez indépendantes basées sur le contenu d'une variable, alors seulement, on passe à un switch.

Enfin, avant d'avoir la logique, faut au moins comprendre la définition du if et du switch, voir la différence fondamentale et les cas les plus courants. Mais bon, ..., tout le monde ne se donne pas cette peine avant de se plonger réellement dans un langage et c'est bien dommage ! Ca pourrait éviter pas mal de questions assez (vraiment) basiques :mrgreen:.

Ca dépend aussi de la qualité des cours qu'on a suivi ou lus évidemment. On a pas tous la chance de tomber sur les mieux expliqués ou les plus structurés pour apprendre :)


KOogar
WRInaute accro
WRInaute accro
 
Messages: 3974
Inscription: 16 Nov 2004

Message le Lun Fév 11, 2008 21:44

je suis d'accord avec toi, mais dans ce cas, autant revoir tout le code, beaucoup d'erreurs... de débutant 8)
****
inutile voir dangereux sur certain serveur -> extract($_POST);
empty() va bien + vite que ($title == "")
<BR> est obsolète
.
..


sff
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 336
Inscription: 2 Fév 2005

suite

Message le Mer Fév 13, 2008 12:06

Par quoi tu remplacerais le <br>, est qu'il y a d'autres amélioration possible?

Sinon j'ai une autre question à te poster. Dans une page, faut t'il mieu éxecuter 2 fois la meme requete
comme ceci:

Code:
SELECT champ 1, champ 2 from table;

fonction() {

SELECT champ 3, champ 4 from table;

}


Ou pense tu qu'il est préférable de selectionner tous les champs directement au départ comme ceci:

Code:
SELECT * from table;

fonction() {

global $table;

}


Je selectionne tous pour des raisons technique, sinon j'aurai forcement pris seulement champ 1 à 4 . Donc c'est pour savoir est ce que c'est plus rapide de faire 2 requetes qui selectionnent juste le nécéssaire, ou c'est mieu d'en faire 1 seul qui prend tout d'un coup.

Ah oui aussi, tu dis empty() va bien + vite que ($title == "") , je suis entièrement d'accord, mais le porblème c'est qu'on peu pas cumuler un trim et un empty. TU aurais peut etre une solution?


KOogar
WRInaute accro
WRInaute accro
 
Messages: 3974
Inscription: 16 Nov 2004

Message le Mer Fév 13, 2008 12:23

-trim et empty sont des faux amis. traite les séparement.
$title=trim($title);
if (empty($title)) {}

-remplace <br> par <br />

-pour les requetes, tous dépend de la masse de contenu (au niveau poid) des champs.


sff
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 336
Inscription: 2 Fév 2005

Message le Mer Fév 13, 2008 12:35

Avec <br /> la validation html est pas possible. Sinon si il faut séparer trim et empty c'est pas plus lourd en terme d'éxécution. En terme de poid de page,

ca donnerait ca:
Code: Tout sélectionner
extract($_POST);
$title=trim($title);
$url=trim($url);
$count=trim($count);
$picture=trim($picture);
$content=trim($content);

      $errors = 0;
      $errorlist = "";
     if (empty($title)) { $errors++; $errorlist .= "- Le titre du téléchargement est exigé.<br>"; }
         if (empty($url)) { $errors++; $errorlist .= "- L'url du téléchargement est exigé.<br>"; }
        if (empty($count)) { $errors++; $errorlist .= "- Le compteur du téléchargement est exigé.<br>"; }
      if (empty($picture)) { $errors++; $errorlist .= "- L'url de l'image du téléchargement est exigé.<br>"; }
         if (empty($content)) { $errors++; $errorlist .= "- La description du téléchargement est exigé.<br>"; }
ETC



déja je confirme que c'est plus lourd.

Sinon pour la requete, elle fait 2.3ko en tout.

If ou switch, lequel choisir

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité