Molto spesso si usa creare delle classi che possano adattarsi con facilità a diversi ambienti e diverse situazioni sconosciute al momento in cui si scrive la classe stessa.
Per darvi un'idea di cosa sto parlando, osservate la documentazione di Zend_Rest_Client.
$technorati = new Zend_Rest_Client('http://api.technorati.com/bloginfo'); $technorati->key($key); $technorati->url('http://pixelated-dreams.com'); $result = $technorati->get(); echo $result->firstname() .' '. $result->lastname();
La classe non ha assolutamente alcun metodo firstname()
tanto meno un metodo lastname()
. Tuttavia, ad una richiesta simile l'oggetto risponde correttamente grazie all'introduzione in PHP 5 dei metodi magici.
Anche Ruby offre alcune funzionalità simili. Esiste uno speciale metodo, definito in Kernel, che si chiama Kernel#method_missing. àˆ speciale perché viene invocato ogni volta che si richiama un metodo inesistente in un oggetto.
La documentazione ufficiale offre un esempio significativo, ovvero l'uso di method_missing() in una classe per ottenere il numero corrispondente ad un numero romano.
class Roman def romanToInt(str) # ... end def method_missing(methId) str = methId.id2name romanToInt(str) end end r = Roman.new r.iv #=> 4 r.xxiii #=> 23 r.mm #=> 2000
<
Vi vengono in mente altri usi di questo metodo? Vi lascio con un indovinello per i programmatori Rails. Quale libreria di Rails fonda il suo funzionamento su questo metodo?