Ho un'idea per il sistema di eventi che sto sviluppando per il mio framework personalizzato.Possiamo aggiungere più linee in una funzione estendendola con PHP?
Immaginate una pseudo-funzione come questa.
class Test
{
public function hi()
{
Event::add(__FUNCTION__ . 'is about to run.');
return "hi";
}
}
Immagina di aver bisogno di fare lo stesso per altre funzioni. (Forse si desidera registrare le funzioni eseguite nel runtime e si desidera registrarle in un file separato.)
Invece di eseguire questa operazione e aggiungere Eventi alle funzioni manualmente, è possibile fare qualcosa di simile?
class Test
{
public function hi()
{
return "hi";
}
}
// events.php (It's a pseudo code so may not work.)
// Imagine extend's purpose is to inject codes into target function
Event::bind('on', $className, $methodName, function() use ($className, $methodName)
{
return $className->$methodName->extend('before', Event::add(__FUNCTION__ . 'is about to run.'));
});
L'idea è di iniettare hi()
funzione che è all'interno Test class
e iniettare ciò passiamo extend
funzione all'esterno. 'before'
significa che l'iniezione deve essere nella prima riga della funzione target.
Infine, gli eventi e gli eventi collegati vengono tenuti completamente distanti dalle funzioni. Voglio essere in grado di associare le cose personalizzate senza alterare le funzioni.
Ho la sensazione che possiamo fare questo hacking con eval()
o giocando con call_user_func()
. Non sono sicuro, però. L'utilizzo di eval()
sembra già abbastanza brutto.
La mia domanda è;
- È possibile fare qualcosa con PHP?
- Ha un nome nei principi OOP/OOP, quindi posso leggere oltre?
- Ha senso o è una cattiva idea?
Ho pensato che il punto principale dell'utilizzo delle classi era di riutilizzarli? –
Non sicuro. Forse un proxy? –
[Iniezione di dipendenza] (http://en.wikipedia.org/wiki/Dependency_injection)? Fowler è sempre una buona risorsa quando si tratta di modelli di design. http://www.martinfowler.com/articles/injection.html. ** Evita 'eval' **. – ficuscr