Remplacer un switch php


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

Remplacer un switch php

Message le Dim Nov 29, 2009 12:39

Bonjour,

Je me demande si il y a pas possibilité de remplacer un switch de ce genre :

Code: Tout sélectionner
if(isset($_GET['action'])){
   switch ($_GET['action']) {
   case 'add_sale': add_sale(); break;
   case 'add_sale_crystals': add_sale_crystals(); break;
   case 'buy': buy(); break;
   case 'edit': edit(); break;
   case 'delete': delete(); break;
   case 'finalize': finalize(); break;
      default : lists();
   }
}else{
   lists();
}


Par une ligne de code plus simple. La "case" est toujours la même que la fonction à insérer. Pouvez vous m'aider ?

Merci


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8579
Inscription: 23 Nov 2005

Re: Remplacer un switch php

Message le Dim Nov 29, 2009 12:52

Ca devrait être possible en effet : http://www.manuelphp.com/php/functions.variable-functions.php

Par contre je te conseille tout de même de garder ton switch, qui permet de vérifier que tu ne récupères pas n'importe quoi du $_GET. Sinon bonjour les injections...


rudddy
WRInaute accro
WRInaute accro
 
Messages: 2570
Inscription: 1 Aoû 2007

Re: Remplacer un switch php

Message le Dim Nov 29, 2009 14:40

$action = $_get['action'];

$$action();



un truc dans ce genre devrait faire ton bonheur

tabouet
WRInaute discret
WRInaute discret
 
Messages: 161
Inscription: 2 Oct 2008

Re: Remplacer un switch php

Message le Dim Nov 29, 2009 19:15

Bonsoir,

A ta place je garderai le switch, il a le mérite d'être "clair".

A bientôt,
Alexis

Sullyvan
WRInaute discret
WRInaute discret
 
Messages: 90
Inscription: 20 Mai 2008

Re: Remplacer un switch php

Message le Dim Nov 29, 2009 20:57

rudddy a écrit:$action = $_get['action'];

$$action();



un truc dans ce genre devrait faire ton bonheur

Code: Tout sélectionner
call_user_func($_GET['action'])

me semble un peu plus approprié.

Il reste avant tout à vérifier que $_get['action'] n'est pas n'importe quoi avec un in_array par exemple.

DadouDuck
WRInaute impliqué
WRInaute impliqué
 
Messages: 910
Inscription: 28 Mai 2007

Re: Remplacer un switch php

Message le Dim Nov 29, 2009 22:13

Si c'est des fonctions "normales" :

Code: Tout sélectionner
if (function_exists($_GET['action'])) {
    call_user_func_array($_GET['action']);
}


Si c'est une méthode dans une classe

Code: Tout sélectionner
if (method_exists($_GET['action'])) {
    call_user_func_array($_GET['action']);
}


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 0 invités