Quelle méthode plus professionnelle switch ou isset

Signaler
Messages postés
27
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
13 mars 2008
-
Messages postés
27
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
13 mars 2008
-
Bonsoir,

Je me pose une question basique sur l'optimisation de mon code.

J'ai une page avec plusieurs formulaires qui s'affichent selon des conditions via TinybutStrong et des boutons submit pour soumettre le formulaire.

et je récupère l'info avec cela :

switch ($_POST['ajouter']) {
        case $lister_la_marque:
.........

Cela marche très bien sauf que je commence à avoir pas mal de switch en fonction de mes cas.

Et j'ai trouvé sur ce site qqn qui utilisait :

if (isset($_POST['ajouter']))
     {
............

Les 2 marchent très bien. Je me demande lequel est le plus orthodoxe ou professionnel et si l'un est plus performant que l'autre.

Je souhaite également aborder la prog objet pour mon application. Je me dis le switch en POO bof alors que le isset est peut être plus approprié.

Pourriez-vous m'eclairer sur le sujet et me conseiller.

Merci d'avance.

---------------------------------------------------------
Forum perso : http://le-genie-climatique.positifforum.com
Forum travaux manuels : http://pausebroderie.fr

6 réponses

Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
Hello,

POO et switch, où est la contradiction ? :)
Le switch est juste plus propre et lisible que plein de isset à la suite. Et sûrement plus rapide quand tu as pleiiiiiiiiin de isset vu que tu peux utiliser break, mais sinon...

à+
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Hello,

moi je ne vois surtout pas le rapport entre les deux...? isset() vérifie si une variable a été définie. switch applique un comportement suivant  le résultat d'une expression ou d'une variable. C'est totalement différent. Et avant d'utiliser un switch() sur une variable, il faut s'assurer qu'elle existe (isset()).
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
Lol c'est vrai Malalam, j'avais même pas fait attention, je suppose qu'il parle de choisir entre switch et if ( x == y ) { } else if (x == z) { ...
Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
33
salut,

ça dépend ce que tu veut faire !!!

Si t'a besoin d'aide, MP !!!
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Moui, vu son exemple, suis pas sûr moi :-)
Globalement, si ta variable n'a qu'une seule valeur possible (et c'est le cas pour un bouton submit), il vaut mieux faire :
if(isset($maVar) && $maVar === 'valeur_attendue')
qu'un switch.
Un switch() est là pour tester différentes valeurs possibles et adopter un comportement spécifique à chacune de ces valeurs.

Quant à utiliser le switch() dans de la POO, je ne vois pas pourquoi ce serait contre-indiqué. Tout dépend de l'utilisation que l'on en a : dans certains cas, switch est plus performant, dans d'autres, if ... elseif le sera plus. Mais pour un seul if()...autant conserver if() qui ne sera pas plus lent que switch et fera gagner quelques lignes de code.
Messages postés
27
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
13 mars 2008

Merci à vous.

Je vous met un exemple de ce que j'ai fait où je sens que ca va vous hérissez les poils et que j'ai déjà limite honte à vous le montrer.

J'attendrais vos remarques qui j'espère seront constructives.

Une partie du fichier template :

<!-- Affichage conditionnel si volont? d'ajouter une BD -->

[onload;block=div;when [var._SESSION.ajout_bd;noerr]=='ok']
  
[var.ajouter_une_bd]

     <fieldset class='ajout_bd_0'>
   <form action='./bd.php' method='post'>
      <label>[var.serie_bd] : </label>
        <select name='serie_bd' class='ajout_bd_1'>
               <option value='0'>[var.selectionner_1_bd]</option>
                 <option value='[liste_series.val;block=option]'>[liste_series.val]</option>
            </select>
       

        <label>[var.titre_bd] : </label>
       

        <label>[var.numero_bd] : </label>
       

        <label>[var.possesseur] : </label>
        <select name='le_possesseur' class='ajout_bd_4'>
               <option value='0'>[var.selectionner_1_possesseur]</option>
                 <option value='[liste_possesseurs.val;block=option]'>[liste_possesseurs.val]</option>
            </select>
     

           
* [var.conseils_bd]

           
     </form>
     </fieldset>

<!-- Affichage conditionnel si BD bien ajout?e -->

[onload;block=div;when [var._SESSION.recap_ajout_bd;noerr]=='ok']
   <form action='./bd.php' method='post'>
        <label>[var.ajout_bd_termine].</label>
     </form>series_bd($base_de_donnees, $find, $params array('order'> 'series_bd ASC'), $db_table);
         
               // Fonction pour les possesseurs
               $db_table = POSSESSEURS;
               $find = 'nom_possesseur';               $liste_possesseurs $fonctions_generales->possesseurs($base_de_donnees, $find, $db_table, $params array());
             
               // Appel du fichier modele
               $TBS->LoadTemplate('../../modeles/bd.html');
               $TBS->MergeBlock('liste_series', 'array', 'series');
               $TBS->MergeBlock('liste_possesseurs', 'array', 'liste_possesseurs');
        break;   
   }
// action en cas de clic sur le bouton ajouter pour ajouter une BD
switch ($_POST['ajouter']) {
      case $enregistrer_bd:
           $serie_bd = mysql_real_escape_string($_POST['serie_bd']);
             $titre_bd = mysql_real_escape_string($_POST['titre_bd']);
             $numero_bd = mysql_real_escape_string($_POST['numero_bd']);
             $possesseur = mysql_real_escape_string($_POST['le_possesseur']);             if ($serie_bd '' or $titre_bd '' or $numero_bd == '' or $possesseur == '') {
                echo $erreur_champs_vides_bd;
             }
             else {
                  // Fonction pour l'id de la serie de BD
                $db_table = SERIES_BD;
                $find = 'id_series_bd';                $result $base_de_donnees->select($find, $params array('where' => "series_bd = '" . $serie_bd . "'"), $db_table);
                    $id_serie = mysql_result($result,0,('id_series_bd'));
                  // Fonction pour l'id du possesseur de BD
                $db_table = POSSESSEURS;
                $find = 'id_possesseurs';                $result $base_de_donnees->select($find, $params array('where' => "nom_possesseur = '" . $possesseur . "'"), $db_table);
                    $id_possesseur = mysql_result($result,0,('id_possesseurs'));                   
                    // Comptage du nombre de BD avant l'ajout pour verif bien ajout?
                    $db_table = BD_TABLE;
                    $find = 'id_bd';                     $nb_initial_bd $base_de_donnees->count($params array(), $db_table);
                // Requete ajout de la BD                  $attributes array('id_bd'> 'Default', 'titre_bd' => $titre_bd, 'T_series_bd_id_series_bd' => $id_serie, 'T_possesseurs_id_possesseurs' => $id_possesseur, 'numero_bd' => $numero_bd);
                    $base_de_donnees->add($attributes, $db_table);
                    // Comptage du nombre de BD apres l'ajout pour verif bien ajout?
                    $find = 'id_bd';                     $nb_final_bd $base_de_donnees->count($params array(), $db_table);
                if ($nb_initial_bd < $nb_final_bd)
                {
                   $_SESSION['recap_ajout_bd'] = 'ok';
                }
             }
             // Appel du fichier modele
             $TBS->LoadTemplate('../../modeles/bd.html');
        break;
}

C'est peut être pas tres clair vu de l'extérieur.

J'ai une classe qui gère les opérations liées à MySQL et les templates sont issus de tinybutstrong (simple et suffisant pour ce que je veux faire). J'avais envisager d'utiliser le framework de Zend mais un peu trop compliquer j'ai pas réussi à avancer.

Je fait évoluer mon code en me perfectionnant au fur et à mesure de apprentissage et de la lecture des tutoriels. PHP c'est bien mais dès qu'on fait un truc complexe faut bien se structurer.

Le but de mon application est un outils de gestion de collection (bd, cd, etiquettes de vin, pièces euros...) le tout le plus modulable possible pour ne pas redevelopper 4 fois la meme fonction avec des paramètres différents.

N'hésitez pas à me dire ce que je peux améliorer dans ma façon de coder.

---------------------------------------------------------
Forum perso : http://le-genie-climatique.positifforum.com
Forum travaux manuels : http://pausebroderie.fr