PDA

View Full Version : [PHP] Modificare nomi metodi PHP


mastrobutti
11-11-2008, 10:38
Ragazzi sono da un po' che ci sto pensando ma non ne salto fuori.... sì ho già cercato nel forum ma non ho trovato nulla.

Allora la situazione è semplice: dopo un GET, ricevo $_GET['action'] che non è altro che il tipo di azione che devo svolgere. Questa action è un metodo di una classe Model.

Quindi richiamo la classe, e poi dovrei richiamare il metodo.

Quello che vorrei fare io è questo: visto che ho 20 metodi, vorrei una cosa automatizzata, e quindi vorrei che il nome del metodo venisse richiamato da solo.
Avevo provato così

$Model = new Model();
$Model->$_GET['action']."()";

ma non mi lancia il metodo, mentre se faccio

$Model = new Model();
$Model->login();

(login() è uno dei metodi) funziona alla perfezione.

:mc: :mc:

Non vorrei agire con switch o robe simili perchè sporcherei tanto il codice, speriamo che qualcuno di voi mi illumini :D

Grazie a tutti

kk3z
11-11-2008, 14:44
Attento a fare queste cose, controlla che effettivamente $_GET['action'] faccia parte dei metodi che vuoi chiamare, per esempio:
if (in_array($_GET['action'], array("metodo1", "metodo2")))

Comunque la soluzione è usare call_user_func (http://it2.php.net/manual/it/function.call-user-func.php):
call_user_func(array("NomeClasse", $_GET['action']));
//se vuoi qualche parametro
call_user_func(array("NomeClasse", $_GET['action']), $parametro1, $parametro2);
//oppure anche
call_user_func_array(array("NomeClasse", $_GET['action']), array($parametro1, $parametro2));

mastrobutti
11-11-2008, 15:12
Grazie mille, questa funzione mi mancava: mi hai salvato stavo già provando alchimie strane.

Ora scrivo anche una bella funzione per controllare le action che mi arrivano.

Visto che ci sono ti chiedo ancora una cosa: c'è una funzione che mi permette di conoscere tutti i metodi di una classe? Le action disponibili sono tutte action, quindi per riempire l'array di controllo farei una funzione che si va a riempire da sola l'array con tutti i metodi che trova nella classe.

Grazie ancora :cool:

kk3z
11-11-2008, 18:06
Trovata su google (http://www.google.it/search?hl=it&q=get+class+methods+php&btnG=Cerca&meta=): get_class_methods (http://it2.php.net/manual/en/function.get-class-methods.php)
Leggi anche le note e i commenti, c'è una differenza tra php4 e php5.