Fluent interfaces: cosa sono?

Salve gente, questa è per quelli che hanno studiato un pò di ingegneria del software...  ;)

sapete spiegarmi a grandi linee cosa sono e a cosa servono le Fluent Interfaces le quali sono finalmente implementabili anche in PHP?

Ne ho sentito parlare quì: http://devzone.zend.com/node/view/id/1362

Ciao e Grazie in anticipo

inviato 10 anni fa
Xscratch
X 0 X

Niente di strepitoso,

significa che un linguaggio permette una sintassi del tipo:

<?php
private function makeFluent(Customer $customer) {
    $customer->newOrder()
             ->with(6, 'TAL')
             ->with(5, 'HPK')->skippable()
             ->with(3, 'LGV')
             ->priorityRush();
}            
?>

ovvero un oggetto restituisce come "return" dei suoi metodi un riferimento a se stesso, per cui se si vogliono richiamare una serie di metodi in sequenza di uno stesso oggetto (ed il linguaggio lo permette) allora si può usare quella sintassi.

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

quindi le funzioni chiamate "in modo fluente" non possono avere un return?

ad esempio:

<?php
private function makeFluent(Customer $customer) {
    $foo = $customer->newOrder()
             ->with(6, 'TAL')
             ->with(5, 'HPK')->skippable()
             ->with(3, 'LGV')
             ->priorityRush();
}            
?>

una scrittura del genere sarebbe ammessa? e ancora, cosa conterrebbe la variabile $foo?

risposto 10 anni fa
Xscratch
modificato 10 anni fa
X 0 X
quindi le funzioni chiamate "in modo fluente" non possono avere un return?

in realta devono avero! Ma deve necessariamente essere un riferimento all'oggetto stesso.

ad esempio:

<?php
private function makeFluent(Customer $customer) {
    $foo = $customer->newOrder()
             ->with(6, 'TAL')
             ->with(5, 'HPK')->skippable()
             ->with(3, 'LGV')
             ->priorityRush();
}            
?>

una scrittura del genere sarebbe ammessa?

Si, con PHP 5.

e ancora, cosa conterrebbe la variabile $foo?

contiene il valore restituito dal metodo priorityRush() dell'oggetto $customer

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

ok, ora è molto più chiaro grazie Gianni  O0

risposto 10 anni fa
Xscratch
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda