Remplacer un switch php

WRInaute impliqué
Bonjour,

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

Code:
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
 
WRInaute discret
rudddy a dit:
$action = $_get['action'];

$$action();



un truc dans ce genre devrait faire ton bonheur
Code:
 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.
 
WRInaute impliqué
Si c'est des fonctions "normales" :

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

Si c'est une méthode dans une classe

Code:
if (method_exists($_GET['action'])) {
    call_user_func_array($_GET['action']); 
}
 
Discussions similaires
Haut