If ou switch, lequel choisir
23 messages
• Page 1 sur 2 • 1, 2
-

sff - WRInaute occasionnel

- Messages: 336
- Inscription: 2 Fév 2005
If ou switch, lequel choisir
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.
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:
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.
- 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.
-

arnaudmn - WRInaute passionné

- Messages: 1542
- Inscription: 11 Mai 2005
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.
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

- Messages: 12
- Inscription: 2 Fév 2008
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 ...)
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 ...)
-

KOogar - WRInaute accro

- Messages: 3974
- Inscription: 16 Nov 2004
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
On peut donc conclure que c'est idem
-

mahefarivony - WRInaute accro

- Messages: 11405
- Inscription: 14 Oct 2002
YoyoS a écrit:On se demande même pourquoi il y a un switch vu qu'on passe partout.
+1
-

YoyoS - WRInaute accro

- Messages: 3835
- Inscription: 14 Sep 2006
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
.
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
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
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

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

sff - WRInaute occasionnel

- Messages: 336
- Inscription: 2 Fév 2005
suite
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?
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?
-

sff - WRInaute occasionnel

- Messages: 336
- Inscription: 2 Fév 2005
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:
déja je confirme que c'est plus lourd.
Sinon pour la requete, elle fait 2.3ko en tout.
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.
23 messages
• Page 1 sur 2 • 1, 2
Lectures recommandées sur ce thème :
- Conseils en référencement pour les débutants - 04-08-2008
- Les meilleurs backlinks externes - 04-08-2008
- Keyword Search Engine : le choix des bons mots-clés - 09-08-2004
- Accord entre Ask Jeeves et Google - 18-07-2002
- Selon 1ère Position / Xiti, "Google monte toujours !" - 03-07-2002
- Bien choisir le titre de chaque page : conseil n°4 en référencement - 04-08-2008
- Les pays gérés par la Google Toolbar 2.0 - 26-06-2003
- Mettre à jour régulièrement son site : conseil n°10 en référencement - 04-08-2008
Consultez la description détaillée des produits ou services de Google suivants : Google Earth Flight Simulator
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

