beh...
mettiamo che la mia classe ha questo metodo (ovviamente è ESTREMAMENTE striminzito)
codice:
function set_callback($callback_name, $callback_function) {
$this->__callbacks[$callback_name] = $callback_function;
}
poi ho il metodo "privato" __call_callback
codice:
function __call_callback($callback_name, $callback_params=array()) {
if (!isset($this->__callbacks[$callback_name])) return FALSE;
$res = call_user_func_array($this->__callbacks[$callback_name], $callback_params);
return $res;
}
codice:
function onLogin_event($login_id, $login_name) {
.
.
.
}
$class = &new Class();
$class->set_callback('onLogin', 'events_onLogin');
e al momento del login all'interno del mio codice richiamo il metodo __call_callbacks passando come primo parametro onLogin e come secondo parametro un'array composto da due elementi nei quale nella prima posizione ci sta l'id utente nella seconda posizione il nome utente
un'esempio banalissimo, ma se ad es voglio far si che mi venga passato un parametro fisso aggiuntivo per una specifica callback basta che dentro l'array __callbacks invece di impostare il valore della funzione imposto un sotto array che comprende un'array con la lista dei parametri aggiuntivi e un valore che è quello della funzione
ed essendo che passando un'array, al posto del nome della funzione posso utilizzare una classe ho tutto estremamente flessibile
se ad es voglio fare una classe che si chiama SocketServer e far si che questa classe si occupi della creazione e della gestione di tutte le richieste fatte alla socke server e poi di richiamarmi anche le callbacks sue personali in questo modo posso impostare come parametro predefinito un indice che mi gestisce la classe SocketServer e quindi posso sapere quale socket è che mi richiama l'evento e posso anche far smistare l'evento fuori
))
ecco perché sono indirizzato su questa strada, cosa non molto fattibile usando l'estensione delle classi xche invece di far gestire tutto ad una classe ogni classe gestirebbe tutto per i fatti suoi...non so dal punto di vista teorico cosa sia meglio, ma dal punto di vista funzionalità e praticità so decisamente meglio le callbacks, almeno per questo tipo di applicazione. Anche xche è una cosa standard...se avete mai usato librerie esterne, anche in java, molte di queste utilizzano le callbacks per ritornare informazioni e valori e non l'estensione delle classi xche la gestione di array di queste diventerebbe troppo complesso da gestire ^^