Programmare in Php attraverso le interfacce fluent
Leggo con un certo interesse del nuovo meme di planet-php, cioè dell'uso di interfacce fluent.
A seguire un piccolo tutorial su come utilizzarle.
In cosa consistono le interfaccie fluent? Detto in maniera semplice si tratta del principio di method chaining di linguaggi come SmallTalk che comporta l'esecuzione metodi in cascata senza dichiarare ogni volta l'oggetto, in modo da poter leggerne il codice fluentemente come se fosse una frase.
Cioè invece che scrivere:
PLAIN TEXT
PHP:
$pippo = new Oggetto(); $pippo->faccioQuesto(); $pippo->poiQuello(); $pippo->eQuellaltro();
usando un'interfaccia fluent riscrivo così:
PLAIN TEXT
$pippo= new Oggetto(); $pippo->faccioQuesto()->poiQuello()->eQuellaltro();
che può essere poi reso più leggibile grazie alla gestione degli spazi e degli a capo di php ed usando un'opportuna tabulazione
PLAIN TEXT
PHP:
$pippo= new Oggetto();
$pippo->faccioQuesto()
->poiQuello()
->eQuellaltro();
ma come funziona un codice del genere? semplicemente restituendo all'interno dei metodi sempre l'oggetto iniziale
PLAIN TEXT
PHP:
class Oggetto()
{
var $variabile = '';
function public faccioQuesto()
{
echo 'ciao';
return $this;
}
function public poiQuello()
{
$this->poiQuelloPrivato();
return $this;
}
function public eQuellaltro()
{
echo $this->variabile;
return $this;
}
function private poiQuelloPrivato()
{
$this->variabile = 'mondo';
}
}
anche se più comodo da leggere e da usare questo metodo di programmazione ha alcuni limitazioni:
- innanzitutto per alcune procedure complesse bisognerà sempre conoscere a priori la sequenza di comandi da eseguire (anche se spesso è così anche nella normale programmazione ad oggetti), e bisognerà conoscere tutti i parametri da passare a questi ultimi
- il codice qui sopra esposto funziona solo con php 5 che permette di restituire l'oggetto iniziale direttamente dai metodi
- scordatevi una Naming Convention decente dei metodi, o si usano dei termini "fluidi" e facili da concatenare o il giochetto perde di significato in leggibilità
- e ultima cosa, come fa notare Andi Gutsman, l'utilizzo di una fluent interface comporta l'uso metodico delle exception (non sempre usate dagli sviluppatori procedurali).
- Articolo precedente Da Php a Flash
- Articolo successivo Controllare e testare le Regular Expressions sia in Php che in Javascript