Soluzioni consigliate per la creazione di una richiamata che le catene Metodi multipli e / o proprietà?
Domanda
Stiamo lavorando su un'interfaccia di tipo Builder che in fondo costruisce un elenco per fare la gestione CRUD di singoli oggetti (dal momento che stiamo usando un oggetto ActiveRecord == un record del database).
Al fine di rendere specificando i valori delle colonne e dei parametri per le opzioni di Lista flessibile che inizialmente attuato gli argomenti di callback come una matrice che si presentava così:
'params' => array(
'static' => $this->institution->id,
array(
'method1' => array(
'method_name',
array('arg1', 'arg2')
),
'prop1' => 'id')
Questa soluzione presenta degli inconvenienti evidenti solo in termini di disagio, ecc ma ha funzionato.
Su suggerimento di un collega, abbiamo cercato chiusure di attuazione, ma a causa di un altro requisito con la classe, dobbiamo serializzare tutti i dati nella classe che abbiamo appena scoperto non funziona con le chiusure. La sintassi con le chiusure era ovviamente molto più semplice:
'params' => array(
$this->institution->id,
function($obj) { return $obj->method_name($arg1, $arg2)->id; }
)
Quindi la mia prima domanda è se c'è un modo per conservare la chiusura in un formato serializable (come una stringa) e poi riconvertirlo in una chiusura una volta che la classe è deserializzato?
O qualcuno può fornire un suggerimento su una migliore interfaccia per risolvere questo tipo di problema richiamata?
Soluzione
V'è un eccellente e post dettagliato su come utilizzare Reflection per estendere Chiusure a fare quello che vuoi: allungabile PHP 5.3 Chiusure con serializzazione e Reflection . Detto questo, mi chiedo se questo è meno imbarazzante di quanto il tuo soluzione originale, dal momento che dovrete passare oggetti invece -. In modo efficace solo codifica in modo leggermente diverso e si potrebbe anche finire con un calo di prestazioni