8770 sujets
Développement web côté serveur, CMS
FlorentG a écrit :C'est bien ce que je pensais.
Oui, parfaitement négligeable pour un petit switch
Dans ce cas, je propose de remplacer l'expression "code de goret" par "code scolaire", "code didactique" ou "code pédagogique"
Tous les visiteurs de sont pas des codeurs aguerris (en particulier ceux qui indiquent dans le titre de leur message ), pas la peine de leur mettre des claques parce que leur code n'est pas optimisé
Et si, en tant que défenseur du switch, vous lui proposiez une version optimisée de son code au lieu de me chercher des crosses
Parce que si c'est pour utiliser un switch autant optimisé son truc alors.
Dans la foulée, quel est le défaut de son entrée en matière ?
Modifié par Bison (08 Nov 2006 - 15:24)
Parce que si c'est pour utiliser un switch autant optimisé son truc alors.
Dans la foulée, quel est le défaut de son entrée en matière ?
if (!isset($_GET['page'])) $page= 'Accueil'; else $page= $_GET['page'];
Modifié par Bison (08 Nov 2006 - 15:24)
Code de goret va très bien aux variables dynamiques pourtant.
Puis c'est sympa un goret, c'est tout rose avec la queue en tire-bouchon...
<div id="Head">, <div id="MenuGauche"> et <div id="Centre"> dans les pages respectives.
Voilà, là au moins on justifie l'emploi du switch.
Puis c'est sympa un goret, c'est tout rose avec la queue en tire-bouchon...
<?php
switch($page)
{
case 'accueil':
include ('up.htm');
include ('left_Accueil.htm');
include ('Accueil.htm');
break;
case 'IPA':
include ('up.htm');
include ('/Cours/left_IPA.htm');
include ('/Cours/IPA.htm');
break;
case 'PGD':
include ('up.htm');
include ('/Cours/left_PGD.htm');
include ('/Cours/PGD.htm');
break;
case 'Sociologie':
include 'up.htm';
include ('/Cours/left_Sociologie.htm');
include ('/Cours/Sociologie.htm');
break;
case 'TQ':
include 'up.htm';
include ('/Cours/left_Techniques_quantitatives.htm');
include ('/Cours/Techniques_quantitatives.htm');
break;
default:
include ('acceuil.htm');
include ('left_Accueil.htm');
include ('Accueil.htm');
}
?>
<div id="Head">, <div id="MenuGauche"> et <div id="Centre"> dans les pages respectives.
Voilà, là au moins on justifie l'emploi du switch.
a écrit :Ah non, ça c'est Porcinet
Puis c'est sympa un goret, c'est tout rose avec la queue en tire-bouchon
Ne me prenez pas pour un neuneu quand même... j'apprécie moyennement.
Si j'ai fait cette boucle, c'est parce que c'est moi, en passant à Apache 2 et PHP 5, qui ai désactivé les register_globals sur le serveur ...
Mon prédécesseur a tout codé en s'appuyant dessus. Vous m'excuserez, mais mon "client" m'a fixé d'autres objectifs que de faire du joli code...
Déjà que quand j'ai annoncé qu'il fallait que je reprenne le code sur un site et que j'en avais pour 3-4 mois c'est moyennement passé.
Je pense qu'il vous manque un peu de pédagogie pour faire passer vos messages au lieu d'arriver tambour battant et de taper sur tout ce qui bouge.
Si j'ai fait cette boucle, c'est parce que c'est moi, en passant à Apache 2 et PHP 5, qui ai désactivé les register_globals sur le serveur ...
Mon prédécesseur a tout codé en s'appuyant dessus. Vous m'excuserez, mais mon "client" m'a fixé d'autres objectifs que de faire du joli code...
Déjà que quand j'ai annoncé qu'il fallait que je reprenne le code sur un site et que j'en avais pour 3-4 mois c'est moyennement passé.
Je pense qu'il vous manque un peu de pédagogie pour faire passer vos messages au lieu d'arriver tambour battant et de taper sur tout ce qui bouge.
Oula... register_globals est désactivé par défaut depuis php4.
Quel est le rapport entre boucle et register_global ?
Quel est le rapport avec les variables dynamiques présentées plus haut ?
Si tu codes pour un "client", cela sous-entend "pour une perssonne qui paie", c'est une raison de plus pour lui fournir des prestations correctes et pérennes.
Tu devrais être content qu'on se penche sur ton sujet afin de te donner les infos adéquates permettant de fournir une appli qui tienne la route.
Faut pas confondre quand même, le demandeur c'est pas moi !
Bon bref, pas grave.
Quel est le rapport entre boucle et register_global ?
Quel est le rapport avec les variables dynamiques présentées plus haut ?
Si tu codes pour un "client", cela sous-entend "pour une perssonne qui paie", c'est une raison de plus pour lui fournir des prestations correctes et pérennes.
Tu devrais être content qu'on se penche sur ton sujet afin de te donner les infos adéquates permettant de fournir une appli qui tienne la route.
Faut pas confondre quand même, le demandeur c'est pas moi !
Bon bref, pas grave.
Bonjour.
De toute façon, ces comparaisons animalières, outre qu'elles sont vexantes, ne font pas avancer le schmilblick.
Il ne faut pas imaginer de ségrégation entre les tenants du tout switch, et les tenants du tout array, l'une et l'autre structure apportant ses avantages et inconvénients, et se trouve plus adapté à tel ou tel cas.
Dans le cas présent, il est question de remplir trois "div" avec du contenu en fonction d'un paramêtre GET. La proposition de départ consistait à utiliser 3 switch. Or, c'est réalisable avec un seul:
Objectivement, ceci est "lisible" et maintenable. L'utilisation du switch est conforté par l'exploitation du cas "default" qui, pour être couvert avec des tableaux aurait nécessité autant de "if then else" que de div à remplir.
Modifié par GeorgesM (09 Nov 2006 - 10:39)
De toute façon, ces comparaisons animalières, outre qu'elles sont vexantes, ne font pas avancer le schmilblick.
Il ne faut pas imaginer de ségrégation entre les tenants du tout switch, et les tenants du tout array, l'une et l'autre structure apportant ses avantages et inconvénients, et se trouve plus adapté à tel ou tel cas.
Dans le cas présent, il est question de remplir trois "div" avec du contenu en fonction d'un paramêtre GET. La proposition de départ consistait à utiliser 3 switch. Or, c'est réalisable avec un seul:
<?php
$context = (isset($_GET["page"])) ? $_GET["page"] : "accueil";
switch($context)
{
case 'accueil':
$left = "left_accueil.htm;
$mid = "mid_accueil.htm";
$right = "right_accueil.htm";
break;
case 'subject_1':
$left = "left_subject_1.htm;
$mid = "mid_subject_1.htm";
$right = "right_subject_1.htm";
break;
case 'subject_2':
$left = "left_subject_2.htm;
$mid = "mid_subject_2.htm";
$right = "right_subject_2.htm";
break;
default: // Le param GET contient une valeur fantaisiste
$left = "left_accueil.htm;
$mid = "error.htm"; // un message d'erreur courtois et polis
$right = "left_accueil.htm";
}
// à ce stade, tout les cas de figures sont couverts...
?>
<body>
<div id="menu_gauche">
<?php include $left; ?>
</div>
<div id="main">
<?php include $mid; ?>
</div>
<div id="col_droite">
<?php include $right; ?>
</div>
</body>
Objectivement, ceci est "lisible" et maintenable. L'utilisation du switch est conforté par l'exploitation du cas "default" qui, pour être couvert avec des tableaux aurait nécessité autant de "if then else" que de div à remplir.
Modifié par GeorgesM (09 Nov 2006 - 10:39)
Je ne suis pas demandeur... Regarde l'auteur du topic.
Le rapport entre la boucle que j'ai donné et register_globals ?
Simple... quand toutes les variables exploitées dans la page proviennent de GET ou POST. Si ton code utilise directement des $page au lieu des $_GET['page'], tu vas t'amuser à reprendre le formulaire d'origine pour noter un à un tous les champs et refaire des vérifications ?
Avec du temps oui, c'est même une obligation.
Sauf qu'on a tous nos contraintes, les miennes étant ailleurs pour le moment. Cette boucle permet de filtrer ce qui est passé dans GET ou POST sans avoir à retoucher le reste du code et de garder les mêmes noms de variables.
Ca fait gagner un temps fou dans l'immédiat. Ce qui n'exclut pas de reprendre le code à terme.
J'aurais peut être du préciser que cette boucle, qui contient des variables dynamiques, n'est à utiliser qu'en cas de manque de temps...
Ce n'est pas une solution, c'est un palliatif temporaire.
Le rapport entre la boucle que j'ai donné et register_globals ?
Simple... quand toutes les variables exploitées dans la page proviennent de GET ou POST. Si ton code utilise directement des $page au lieu des $_GET['page'], tu vas t'amuser à reprendre le formulaire d'origine pour noter un à un tous les champs et refaire des vérifications ?
Avec du temps oui, c'est même une obligation.
Sauf qu'on a tous nos contraintes, les miennes étant ailleurs pour le moment. Cette boucle permet de filtrer ce qui est passé dans GET ou POST sans avoir à retoucher le reste du code et de garder les mêmes noms de variables.
Ca fait gagner un temps fou dans l'immédiat. Ce qui n'exclut pas de reprendre le code à terme.
J'aurais peut être du préciser que cette boucle, qui contient des variables dynamiques, n'est à utiliser qu'en cas de manque de temps...
Ce n'est pas une solution, c'est un palliatif temporaire.
a écrit :
Ce n'est pas une solution, c'est un palliatif temporaire.
Mouarf... fabuleux !
Au fond vous avez raison, je ne vois pas pourquoi je devrais insister.
EDIT :
Arf j'avais pas lu ça !
GeorgesM a écrit :
Objectivement, ceci est "lisible" et maintenable. L'utilisation du switch est conforté par l'exploitation du cas "default" qui, pour être couvert avec des tableaux aurait nécessité autant de "if then else" que de div à remplir.
Modifié par Bison (09 Nov 2006 - 14:01)
Vikchill a écrit :
Tu fais quand même un peu intégriste là Bison.
C'est moi qui fait intégriste, tu y va fort !
Ils sont tous les deux occupés à raconter des énormités...
Dire qu'il faudrait des tonnes de if else pour le faire avec un tableau...
Maintenable, non c'est pas maintenable !
- Pour le moment, il y a 3 pages pas plus à son truc... ça va donner quoi son switch avec 200 pages ????
- C'est moins souple d'ajouter un choix avec un switch qu'avec un tableau puisque dans le cas du switch il faudra écrire le code lié au nouveau choix... pas avec un tableau !
- si c'est pour donner au switch une structure identique à celle d'un array, pourquoi donc utiliser le switch qui est moins performant ?
Bref, l'intégriste c'est pas moi !
En plus, je remarque qu'aucun des deux n'a demandé à voir une version avec tableau juste pour savoir si je ne pouvais pas avoir raison. (6 lignes de code)
Voilà.
Si indiquer des bonnes habitudes et proposer du code à la hauteur c'est être intégriste, alors oui je suis un intégriste.
Modifié par Bison (09 Nov 2006 - 15:26)
Aureance a écrit :
Bonsoir.
Oserais-je demander à Bison quelle solution il apporte au problême ?
Le code proposé plus haut m'avait paru futé (le premier, je veux dire), mais je suis novice; Si une "array" peut remplacer plus simplement et solidement le "switch / case"… J'aimerai bien une petite démonstration de code. Et celà résoudrai peut_être la question ?
... je cite ...
en réponse à
a écrit :
En plus, je remarque qu'aucun des deux n'a demandé à voir une version avec tableau juste pour savoir si je ne pouvais pas avoir raison. (6 lignes de code)
Modifié par GeorgesM (09 Nov 2006 - 15:31)
Aureance a écrit :
Bonsoir.
Oserais-je demander à Bison quelle solution il apporte au problême ?
Au temps pour moi !
Cela m'a échappé.
<?php
$pages=array(
'accueil'=>'accueil',
'page1'=>'mapage1',
'page2'=>'mapage2'
);
if(isset($_GET['page']) && array_key_exists($_GET['page'],$pages)) $suite=$_GET['page']; else $suite='accueil';
?>
<div id="menu_gauche">
<?php include 'left_'.$suite.'.htm'; ?>
</div>
<div id="main">
<?php include 'mid_'.$suite.'.htm'; ?>
</div>
<div id="col_droite">
<?php include 'right_'.$suite.'.htm'; ?>
</div>
De plus, sortir de php par 3 fois pour afficher 3 bête div c'est idiot, autant tout faire en php.
Donc ça donne :
<?php
$pages=array(
'accueil'=>'accueil',
'page1'=>'mapage1',
'page2'=>'mapage2'
);
if(isset($_GET['page']) && array_key_exists($_GET['page'],$pages)) $suite=$_GET['page']; else $suite='accueil';
echo '
<div id="menu_gauche">',include ('left_'.$suite.'.htm'),'</div>
<div id="main">',include ('mid_'.$suite.'.htm'),'</div>
<div id="col_droite">',include ('right_'.$suite.'.htm'),'</div>';
?>
- Votre solution implique de disposer et maintenir quinze pages externes, soit le produit du nombre de div (3) par le nombre de contextes (5).
Hors, dans le cas présenté, plusieurs pages sont communes à plusieurs contexte.
- On ne gère pas de solution de signalement si le nom de contexte est farfelu.
- Dans le projet réel, les trois "div" ne sont pas nécessairement contigus.
Hors, dans le cas présenté, plusieurs pages sont communes à plusieurs contexte.
- On ne gère pas de solution de signalement si le nom de contexte est farfelu.
- Dans le projet réel, les trois "div" ne sont pas nécessairement contigus.
Admettons que les menus des cinq contextes soient de deux types : menu_a.htm et menu_b.htm.
On aurait :
C'est sans soucis particulier.
On aurait :
switch($context)
{
case 'accueil':
$left = "menu_a.htm; // << menu_a
$mid = "mid_accueil.htm";
$right = "right_accueil.htm";
break;
case 'subject_1':
$left = "menu_a.htm; // << menu_a (le même)
$mid = "mid_subject_1.htm";
$right = "right_subject_1.htm";
break;
case 'subject_2':
$left = "menu_b.htm; // << menu_b (un autre)
$mid = "mid_subject_2.htm";
$right = "right_subject_2.htm";
break;
...
C'est sans soucis particulier.