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 9 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 9 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 9 anni fa
Xscratch
modificato 9 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 9 anni fa
Gianni Tomasicchio
X 0 X

ok, ora è molto più chiaro grazie Gianni  O0

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