Pre e post hook a funzioni o metodi in PHP

Curiosando qua e là in PECL ho scoperto una nuova estensione per PHP abbastanza interessante, funcall, che permette di aggiungere degli hook a funzioni o metodi prima o dopo la loro esecuzione, invocandoli in automatico. Per esempio:


function funzione($foo, $bar) { echo "Foo: $foo, Bar: $bar"; } function pre_funzione($args) { // $args -> argomenti passati alla funzione (come array)} function post_funzione($args, $result, $time) { // $args -> argomenti passati alla funzione (come array) // $result -> contiene il valore ritornato della funzione // $time -> tempo impiegato nel processare la funzione} fc_add_pre('funzione','pre_funzione'); fc_add_post('funzione','post_funzione'); funzione('lol', 'wut');

In questo caso pre_funzione e post_funzione verranno invocate automaticamente chiamando normalmente funzione e, ovviamente, possono essere attaccate più di una pre / post callback con la possibilità di ottenerne l’elenco a runtime sotto forma di array attraverso la funzione fc_list. La prima cosa che può venire in mente a questo punto è il pattern design by contract e in effetti questa estensione potrebbe tornare utile in questo senso, anche se ammetto che è tutto da verificare (leggasi: voglio provare bene prima di esserne sicuro). Rimane comunque da verificare la stabilità di questa estensione, dal momento che parrebbe recente, e quanto impatti in termini prestazionali un suo eventuale utilizzo, ad ogni modo ho già un caso in cui potrebbe tornarmi utile. Giusto per andare leggermente off-topic: in Ruby 2.0 questa funzionalità sarà supportata nativamente mentre ad oggi è disponibile solo attraverso l’utilizzo di moduli come DesignByContract.


Puoi scrivere un commento oppure inviare un trackback dal tuo sito.

Lascia un commento

Puoi utilizzare i seguenti tag XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>