2012-06-17 7 views
16

Esame di Zend Framework Ho scoperto che ogni metodo di setter di qualsiasi classe (di quelli che ho esaminato) restituisce l'istanza della classe in cui vive. Non solo imposta un valore ma imposta un valore e restituisce anche $ this. Ad esempio:

/* Zend_Controller_Router */ 
public function setGlobalParam($name, $value) { 
    $this->_globalParams[$name] = $value; 
    return $this; 
} 

    /* Zend_Controller_Request */ 
public function setBaseUrl($baseUrl = null) { 
    // ... some code here ... 
    $this->_baseUrl = rtrim($baseUrl, '/'); 
    return $this; 
} 

    /* Zend_Controller_Action */ 
public function setFrontController(Zend_Controller_Front $front) { 
    $this->_frontController = $front; 
    return $this; 
} 

E così via. Ogni setter pubblico restituisce $ this. E non solo setter, ci sono anche alcuni metodi d'azione, che restituisce anche $ this:

public function addConfig(Zend_Config $config, $section = null) { 
    // ... some code here ... 
    return $this; 
} 

Quello che per questo è necessario? Cosa restituisce $ questo? Ha qualche significato speciale?

+4

Tornando '$ (this)' significa che è possibile metodi di catena, ad esempio '$ myClass-> method_1 ($ x) -> method_2 ($ y)'. –

+1

Ho notato questo anche in passato e non ho mai pensato di porre la domanda. Grazie ora ho la risposta. – RockyFord

risposta

37

Il return $this consente il concatenamento di metodi come:

$foo->bar('something')->baz()->myproperty 
4

È così che metodo chiama un oggetto può essere "incatenato", come questo.

$obj -> setFoo ('foo') -> setBar ('bar') -> setBaz ('baz') -> setFarble ('farble'); 
+0

So che questo commento è stato fatto nel 2012 e il suo scopo principale è quello di dimostrare l'uso di metodi a catena, ma per tutti i principianti semplicemente imparando a conoscere questo: PER FAVORE non mettere tutti quegli spazi in mezzo! :) – bazzaretta

+0

@bazzaretta Non sei il capo degli spazi bianchi! – GordonM

Problemi correlati