Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > it.comp.www.php > #20695
| From | Alessandro Pellizzari <shuriken@amiran.it> |
|---|---|
| Newsgroups | it.comp.www.php |
| Subject | Re: trait per decoratore standard |
| Date | 2016-04-22 20:46 +0000 |
| Message-ID | <dnvgthFtcr9U2@mid.individual.net> (permalink) |
| References | (2 earlier) <nfct6l$8bg$1@gioia.aioe.org> <dnunrpFo6dcU1@mid.individual.net> <nfdck8$156e$1@gioia.aioe.org> <dnv4k9FrdduU1@mid.individual.net> <nfe0uj$9e3$1@gioia.aioe.org> |
Il Fri, 22 Apr 2016 22:18:27 +0200, alex ha scritto:
>>>> Un decoratore non deve avere setter e getter per l'oggetto wrappato.
>>>> Sia perchè l'interface dell'oggetto wrappato potrebbe volerli usare
>>>> per i suoi motivi, sia perchè deve essere totalmente trasparente
>>>> nell'uso, e permettere a chiunque di cambiare l'oggetto wrappato o di
>>>> andarselo a prendere,
>
> Allora forse volevi dire "e NON permettere a chiunque...".
>
>> è sbagliato.
Ho sbagliato a mettere la virgola:
Sia perchè l'interface dell'oggetto wrappato potrebbe volerli usare
per i suoi motivi, sia perchè deve essere totalmente trasparente
nell'uso. E permettere a chiunque di cambiare l'oggetto wrappato o di
andarselo a prendere è sbagliato.
> Io però avrei fatto così:
>
> abstract class LoggerInterface {
> protected $logs = [];
>
> // todo: questa funzione sarebbe meglio chiamarla add final function
> set($log)
> {
> $this->logs[] = $log; // aggiunge un logger
> }
>
> abstract funciton get($log);
> }
>
> class Log implements LoggerInterface {
> public function get() { return $this->logs; }
> }
>
>
> class HtmlLog implements LoggerInterface {
> private $wrapped;
>
> public function __construct(LoggerInterface $log) {
> $this->wrapped = $log;
> }
>
> public function get() {
> return '<ul><li>'.
> implode('<\li><li>', $this->wrapped->get()).
> '<\li><\ul>';
> }
> }
Il problema è che così non funziona. :)
HtmlLog, ereditando da LoggerInterface sia lo storage che il setter, salva
i log nel suo spazio (la sua $this->logs) e non in quello dell'oggetto
wrappato ($this->wrapped->logs), ma la sua get va a prenderli nell'oggetto
decorato, quindi saranno sempre vuoti.
Per questo non conviene che un decorator extend-a una classe abstract, ma
è meglio che implement-i un'interface. In questo modo non hai zavorra con
rischi, come in questo caso, di dimenticarti di wrappare una funzione e
spaccare tutto.
Bye.
Back to it.comp.www.php | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
trait per decoratore standard alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-04-22 11:10 +0200
Re: trait per decoratore standard Alessandro Pellizzari <shuriken@amiran.it> - 2016-04-22 10:36 +0100
Re: trait per decoratore standard alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-04-22 12:08 +0200
Re: trait per decoratore standard Alessandro Pellizzari <shuriken@amiran.it> - 2016-04-22 14:39 +0100
Re: trait per decoratore standard alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-04-22 16:31 +0200
Re: trait per decoratore standard Alessandro Pellizzari <shuriken@amiran.it> - 2016-04-22 18:16 +0100
Re: trait per decoratore standard fmassei@gmail.com - 2016-04-22 10:58 -0700
Re: trait per decoratore standard Alessandro Pellizzari <shuriken@amiran.it> - 2016-04-22 20:00 +0000
Re: trait per decoratore standard fmassei@gmail.com - 2016-04-22 14:01 -0700
Re: trait per decoratore standard Alessandro Pellizzari <shuriken@amiran.it> - 2016-04-23 17:56 +0000
Re: trait per decoratore standard fmassei@gmail.com - 2016-04-24 22:16 -0700
Re: trait per decoratore standard Alessandro Pellizzari <shuriken@amiran.it> - 2016-04-25 14:10 +0100
Re: trait per decoratore standard alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-04-22 22:26 +0200
Re: trait per decoratore standard alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-04-22 22:18 +0200
Re: trait per decoratore standard Alessandro Pellizzari <shuriken@amiran.it> - 2016-04-22 20:46 +0000
Re: trait per decoratore standard alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-04-23 10:30 +0200
Re: trait per decoratore standard alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-04-23 11:07 +0200
Re: trait per decoratore standard alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-04-23 11:32 +0200
Re: trait per decoratore standard Alessandro Pellizzari <shuriken@amiran.it> - 2016-04-23 17:50 +0000
Re: trait per decoratore standard alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-04-24 10:36 +0200
Re: trait per decoratore standard alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-04-24 10:50 +0200
Re: trait per decoratore standard Alessandro Pellizzari <shuriken@amiran.it> - 2016-04-24 11:28 +0000
Re: trait per decoratore standard alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-04-24 18:48 +0200
Re: trait per decoratore standard fmassei@gmail.com - 2016-04-24 22:19 -0700
Re: trait per decoratore standard Alessandro Pellizzari <shuriken@amiran.it> - 2016-04-23 17:45 +0000
Re: trait per decoratore standard alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-04-24 10:26 +0200
Re: trait per decoratore standard Alessandro Pellizzari <shuriken@amiran.it> - 2016-04-24 11:26 +0000
Re: trait per decoratore standard alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-04-26 14:50 +0200
Re: trait per decoratore standard Alessandro Pellizzari <shuriken@amiran.it> - 2016-04-26 15:07 +0100
Re: trait per decoratore standard alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-04-26 21:11 +0200
Re: trait per decoratore standard Alessandro Pellizzari <shuriken@amiran.it> - 2016-04-26 19:31 +0000
Re: trait per decoratore standard alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-04-26 22:02 +0200
Re: trait per decoratore standard Alessandro Pellizzari <shuriken@amiran.it> - 2016-04-26 20:39 +0000
Re: trait per decoratore standard alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-04-27 16:10 +0200
Re: trait per decoratore standard Alessandro Pellizzari <shuriken@amiran.it> - 2016-04-27 15:16 +0100
Re: trait per decoratore standard alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-04-27 17:26 +0200
Re: trait per decoratore standard alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-04-29 17:42 +0200
Re: trait per decoratore standard Alessandro Pellizzari <shuriken@amiran.it> - 2016-04-29 17:12 +0100
Re: trait per decoratore standard alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-04-30 13:20 +0200
Re: trait per decoratore standard fmassei@gmail.com - 2016-04-30 08:06 -0700
Re: trait per decoratore standard alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-04-30 21:26 +0200
Re: trait per decoratore standard Alessandro Pellizzari <shuriken@amiran.it> - 2016-04-30 19:42 +0000
Re: trait per decoratore standard alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-04-30 23:20 +0200
Re: trait per decoratore standard Alessandro Pellizzari <shuriken@amiran.it> - 2016-04-30 21:43 +0000
Re: trait per decoratore standard alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-05-01 10:34 +0200
Re: trait per decoratore standard fmassei@gmail.com - 2016-04-30 14:38 -0700
Re: trait per decoratore standard Alessandro Pellizzari <shuriken@amiran.it> - 2016-04-30 21:41 +0000
Re: trait per decoratore standard alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-05-01 10:45 +0200
Re: trait per decoratore standard fmassei@gmail.com - 2016-05-01 09:02 -0700
Re: trait per decoratore standard alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-05-02 10:45 +0200
Re: trait per decoratore standard fmassei@gmail.com - 2016-04-22 07:12 -0700
Re: trait per decoratore standard alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-04-22 16:44 +0200
Re: trait per decoratore standard fmassei@gmail.com - 2016-04-22 07:58 -0700
csiph-web