Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > it.comp.www.php > #20693
| From | alex <1j9448a02@lnx159sneakemail.com.invalid> |
|---|---|
| Newsgroups | it.comp.www.php |
| Subject | Re: trait per decoratore standard |
| Date | 2016-04-22 22:18 +0200 |
| Organization | Aioe.org NNTP Server |
| Message-ID | <nfe0uj$9e3$1@gioia.aioe.org> (permalink) |
| References | (1 earlier) <dnu9l4Fkjo2U1@mid.individual.net> <nfct6l$8bg$1@gioia.aioe.org> <dnunrpFo6dcU1@mid.individual.net> <nfdck8$156e$1@gioia.aioe.org> <dnv4k9FrdduU1@mid.individual.net> |
Il 22/04/2016 19:16, Alessandro Pellizzari ha scritto:
> On 22/04/2016 15:31, alex wrote:
>
>> Il 22/04/2016 15:39, Alessandro Pellizzari ha scritto:
>
>>> Le uniche due cose che un decoratore deve fare sono implemnetare
>>> l'inteface dell'oggetto wrappato (e non puoi farlo con un trait) e
>>
>> Perchè no? Almeno in parte...
>
> trait T implements I { ... }
> class C { use T; }
>
> var_dump(C instanceof I); // -> false;
>
Qui hai cambiato un po' le cose, cmq a me dà
Fatal error: Cannot use 'I' as interface on 'T' since it is a Trait
>
>> E se questa parte c'è l'ho già pronta (impacchettata per bene in un
>> apposito trait), perchè non riutilizzarla (use MioTrait;)?
>
> Perchè non c'é niente da implementare in un trait.
> I decoratori sono troppo specifici e minimali perchè un trait abbia senso.
>
Forse nella maggior parte dei casi, tuttavia, comme ho fatto intuire,
tutto può essere relativo.
>>> 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.
E' sbagliaro che cosa?
Forse volevi dire "(è una pratica sbaglata)" con le opportune parentesi.
> class Log {
> protected $logs = [];
> public function set($log) { $this->logs[] = $log; }
> public function get() { return implode("\n", $this->logs; }
> }
>
> class LogDecorator {
> use TuoTrait;
> }
>
> class DecoratedLog extends LogDecorator;
>
> $l = new DecoratedLog(new Log());
>
> $l->set('Errore');
>
> var_dump($l->get());
>
> Ti aspetti che torni (string) "Errore" e invece ti torna un dump della
> classe Log.
>
Ad ogni modo, qui hai ragione :P
>>> E se poi hai un oggetto decorato 4 volte, per risalire all'oggetto
>>> originale fai ->get()->get()->get()->get() ?
>>>
>>
>> Quindi come si dovrebbe fare?
>
> Non devi mai accedere all'oggetto wrappato da niente che non sia il
> decoratore stesso:
>
OK
> interface LoggerInterface {
> public function set($log);
> public funciton get($log);
> }
>
> class Log implements LoggerInterface
> {
> protected $logs = [];
> public function set($log) { $this->logs[] = $log; }
> 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>';
> }
> public function set($log) { $this->wrapper->set($log); }
> }
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>';
}
}
>
> $htmlLogger = new HtmlLog(new Log());
>
> var_dump($htmlLogger instanceof LoggerInterface); // -> true
>
Certo :P
>
> Nota che il costruttore forza il parametro ad essere la stessa
> interfaccia che lui stesso implementa.
>
Certamente
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