Utiliser les function() plutot que le $_GET ?

  • Auteur de la discussion Auteur de la discussion sff
  • Date de début Date de début
WRInaute impliqué
Je développe actuellement un site web (jeu en ligne) et je me pose une question. Faut t'il plutot utiliser des fonctions ou faut mieu utiliser des fonctions avec des $GET dedans.

Je m'explique:

Dans l'index de mon site je me retrouve avec ceci:

Code:
 if ($_GET['page'] == "inscription") {include('login.php'); inscription($controlrow);}
	 elseif ($_GET['page'] == "changer_pw") {include('login.php'); changer_pw();}
	  elseif ($_GET['page'] == "verification") {include('login.php'); verification($controlrow);}
	   elseif ($_GET['page'] == "pw_oublie") {include('login.php'); pw_oublie($controlrow);}

Ces lignes seront certainement multiplié par 10 à long terme, et j'ai peur que tous ces elseif ralentisse l'exécution de mon site. C'est pour cela que me pose cette question.

Au lieu d'avoir les ligne ci-dessus, peut etre ca aurait été mieu de laisser une seul ligne de ce genre:

if ($_GET['page'] == "menu") {include('login.php'); menu($controlrow);} et dans la page login.php on y aurait mi des $GET remplacer les autres fonctions. Genre au lieu d'avoir des url de ce genre :?page=inscription, ?page=changer_pw,... on aurait eu ?page=menu&action=inscription. Cela limiterait les elseif (et donc les fonctions) dans l'index et peut être ca ne ralentisserait pas l'exécution des pages.

Est ce que ma réflexion est bonne, ou est ce que ca revient au même d'avoir 50 elseif dans l'index en gardant une fonction pour chaque chose (inscription, changer_pw...)

Si non y a t'il un autre moyen pour avoir 50 conditions en gardant une rapidité d'éxécution des pages?

Merci
 
WRInaute discret
déjà utilise des switch, puis oui, imbrique les c'est mieux, tu fou deux parametres d'url, ainsi tu limitte un peu la charge de php... mais bon c'est assez insignifiant, te tracasses pas non plus juste pour ça
 
WRInaute impliqué
suite

J'ai jamais utilisé les switch, dans quels cas faut 'il les utiliser, et dans quels cas faut il priviléger les elseif?

Sinon avec un bout de code de mon site:

Code:
if(isset($_GET['page'])){
   if ($_GET['page'] == "flash") {include('includes/flash.php'); flash($infosperso);}
    elseif ($_GET['page'] == "deconnexion") { deconnexion(); }

En switch ca donnerai ca?

Code:
switch (isset($_GET['page'])){

case 'flash':
include('includes/flash.php'); flash($infosperso);}
break;

case 'deconnexion':
deconnexion(); 
break;}

Edit HawkEye: [ code] [ /code]
 
WRInaute discret
oui, c'est exactement ça :) n'importe quel site traitant du php te donnera la réponse quand a la différence... mais en gros... c'est plus simple, plus adapté...

siteduzero.com
 
WRInaute passionné
c'est quand même un petit peu nimporte quoi

1) le switch n'est pas plus rapide (mais c'est pas trop grave)
2) le switch n'a aucune construction algoritmique possible

Ces lignes seront certainement multiplié par 10 à long terme

donc si tu as 50 possibilités tu devras ecrire les 50 case

dans le cadre des fonctions, tu les mets toutes dans un tableau sans les () et tu fais une iteration avec un test iis callable(element du tableau)

en trois lignes le probleme est resolu

rog
 
WRInaute passionné
en fait il y a plein de manières de le coder

tu prends le contenu de $_GET['page']
==> eg : $_GET['page']=log

tu verifies l'intersection avec le tableau contenant les fonctions
==> eg : array(0 =>'log');

tu recuperes l'élément
==> eg : log

tu verifies si la fonction is_callable
==> eg : log

tu verifies si la fonction existe
==> eg : log

ensuite tu l'appelles

rog
 
WRInaute impliqué
Oui mais toutes les fonctions ne se trouve pas forcement dans le meme page. Alors comment tu fais pour indiquer qu'il faut appeler dans login.php pour une et menu.php pour l'autre par exemple
 
WRInaute discret
Tu fais un tableau fonctions dans un fichier de conf :

$fonctions["inscription"][] = "mafonction1";
$fonctions["inscription"][] = "mafonction2";
$fonctions["login"][] = "mafonction1";
$fonctions["login"][] = "mafonction341";

Puis tu fais un :

if(!empty($fonctions[$action]))
{
foreach($fonctions[$action] as $mafonction)
{
include($mafonction);
}
}


Et c'est fait !
 
WRInaute impliqué
Et si un site contient une centaine de fonctions, on les met toute dedans la meme page? Ca doit etre super long à s'afficher les sites chez toi
 
WRInaute discret
Ca c'est pas vrai, si t'a 150 fonctions qui font pas la même choses, tu mets pas toutes les fonctions dans le même fichier ! Bonjour la maintenance après !

Une autre technique, tu les inclus toutes dans le fichier de conf (qui lui est toujours inclu à toutes les pages), comme ça, tu n'as pas de questions à te poser, sauf si tu as des fonctions avec le même nom dans des fichiers différents (à éviter).
 
WRInaute passionné
rien à voir, le temps d'execution d'un script est lié à l'execution des instructions et non pas aux declarations

et le temps passé par l'interpreteur à la verification syntaxique des fichiers est négligeable

rog
 
WRInaute discret
rog a dit:
et le temps passé par l'interpreteur à la verification syntaxique des fichiers est négligeable

rog

Je suis assez d'accord. Tu perd plus de temps à calculer les fichiers à inclure plutot que de les inclure par défaut (si il y en a beaucoup, cela nécessite des calculs).
 
WRInaute impliqué
Donc l'éxécution est aussi rapide pour une page bourré de fontions (500 ko par exemple) comparé a un page comprenant 1 seule fonction (20 ko) ?
 
WRInaute discret
sff a dit:
Donc l'éxécution est aussi rapide pour une page bourré de fontions (500 ko par exemple) comparé a un page comprenant 1 seule fonction (20 ko) ?

pour ce genre de chose, c'est plus pour la clarté de ton code...

il faut penser a la charge php, certes, mais surtout a la perenité de ton application (clareté du code, structure de ton appli, etc)

donc, utiliser avant tout les méthodes ayant le rapport simplicité/efficacité la plus "rentable"....
 
WRInaute passionné
sff a dit:
Je développe actuellement un site web (jeu en ligne) et je me pose une question. Faut t'il plutot utiliser des fonctions ou faut mieu utiliser des fonctions avec des $GET dedans.

Je m'explique:

Dans l'index de mon site je me retrouve avec ceci:

Code:
 if ($_GET['page'] == "inscription") {include('login.php'); inscription($controlrow);}
	 elseif ($_GET['page'] == "changer_pw") {include('login.php'); changer_pw();}
	  elseif ($_GET['page'] == "verification") {include('login.php'); verification($controlrow);}
	   elseif ($_GET['page'] == "pw_oublie") {include('login.php'); pw_oublie($controlrow);}
Ici je vois surtout qu'il faudrait que tu mettes le include(login.php) tout en haut vu qu'il sert systématiquement.

A part ça, c'est beaucoup plus propre, sur, etc... de faire une page inscription.php, une page verifier.php, etc. au lieu de faire un index.php?page=inscription.
 
WRInaute passionné
moi j'ai des scripts en standalone qui font 6000 lignes

avec + de 30 fonctions et ils sont executés très rapidement

le parcours des fonctions est uniquement syntaxique, si tu mets une boucle infinie dans une fonction, cela ne buggera le script que si tu l'appelles

pour le chargement en mémoire, je ne pense pas que cela ai une influence

perso je suis persuadé que les allocations pour les variables doivent être gigantesques

rog
 
WRInaute discret
Pour la mémoire, cela en as une, mais c'est minime à ce niveau (Genre tu passe de 30 Ko à 300Ko là ou un script peu aller par défaut à 8mo).

L'allocation des variable, je sais pas trop, mais j'imagine que c'est une structure en liste chainé en interne et que donc, cela ne prend pas de place non plus.
 
WRInaute impliqué
Petite précision:

Plus le fichier est lourd, plus de temps il mettra à charger..
Plus il y a de fichiers, plus c'est long à charger..

-> Il faut trouvé un bon compromis !
 
Discussions similaires
Haut