Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > it.comp.www.php > #22371

Re: parent::__contruct() prima o dopo

From Alessandro Pellizzari <shuriken@amiran.it>
Newsgroups it.comp.www.php
Subject Re: parent::__contruct() prima o dopo
Date 2018-11-26 15:18 +0000
Message-ID <g62h5bFssoU1@mid.individual.net> (permalink)
References (6 earlier) <ptghpd$1lg7$1@gioia.aioe.org> <g620cvFrnu5U1@mid.individual.net> <ptgla2$1sd8$1@gioia.aioe.org> <g624nhFsmd0U1@mid.individual.net> <ptgndd$mh$1@gioia.aioe.org>

Show all headers | View raw


On 26/11/2018 12:02, alex wrote:

> Cmq un decoratore dovrebbe solo richiedere il $wrapper e nient'altro, o 
> sbaglio?

Mi pare che abbiamo già avuto questa conversazione qualche mese fa...

Questo è il codice che hai scritto tu:

class VerboseSender extends AdvancedSender {
     private $_verboseStream;

     public function __construct( $verboseStream, $wrapped ) {
         $this->_verboseStream = $verboseStream;
         parent::__construct( $wrapped );
     }

     function send() {
         $this->_verboseStream->write('Sto inviando un email...');
         $this->_wrapped->send();
     }
}

Che, tra parentesi, trasformi in decoratore cambiando solo la prima riga

class VerboseSender implements Sender {
  ...
}

Questo è un decoratore, e prende $verboseStream, oltre a $wrapped.

>> A cosa serve avere 
>> anche una classe astratta?
> 
> Ad evitare di ripetere questa cosa:
> 
>      private $wrapped;
> 
>      function __construct( Sender $wrapped ) {
>          $this->wrapped = $wrapped;
>      }

> Mi sembra che l'avevo già scritto.

Sì, e io ripeto che mi sembra un motivo insulso.
Ci sono ben pochi decoratori che non hanno bsogno di altre informazioni 
oltre all'oggetto wrappato. Tipicamente fanno cose abbastanza basilari, 
tipo `toUpper`.

Ma se wrappi un oggetto tipicamente vuoi fare qualcosa di più, tipo, 
appunto, scrivere info aggiuntive in uno stream (e ti serve lo stream), 
personalizzare il comportamento in base a dati esterni (e ti serve una 
connessione al DB o un oggetto coi i dati da aggiungere), ecc.

In programmazione funzionale puoi fare currying del decoratore (in 
pratica generare dinamicamente un decoratore prima di applicarlo 
all'oggetto/funziona wrappata), ma in OOP devi passare roba al 
costruttore (o avere un DecoratorFactory... more Java! :P)

>> Forse dipende da limitazioni di C# o di Java, ma in PHP non ha proprio 
>> senso. Serve solo a rendere meno flessibile e più lento il codice.
> 
> Un esempio?

Vedi sopra.

Bye.

Back to it.comp.www.php | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

parent::__contruct() prima o dopo alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-11-23 08:51 +0100
  Re: parent::__contruct() prima o dopo Alessandro Pellizzari <shuriken@amiran.it> - 2018-11-24 09:07 +0000
    Re: parent::__contruct() prima o dopo alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-11-24 14:39 +0100
      Re: parent::__contruct() prima o dopo Alessandro Pellizzari <shuriken@amiran.it> - 2018-11-24 13:51 +0000
        Re: parent::__contruct() prima o dopo alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-11-24 16:04 +0100
          Re: parent::__contruct() prima o dopo Alessandro Pellizzari <shuriken@amiran.it> - 2018-11-25 11:12 +0000
            Re: parent::__contruct() prima o dopo alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-11-26 11:26 +0100
              Re: parent::__contruct() prima o dopo Alessandro Pellizzari <shuriken@amiran.it> - 2018-11-26 10:31 +0000
                Re: parent::__contruct() prima o dopo alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-11-26 12:26 +0100
                Re: parent::__contruct() prima o dopo Alessandro Pellizzari <shuriken@amiran.it> - 2018-11-26 11:45 +0000
                Re: parent::__contruct() prima o dopo alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-11-26 13:02 +0100
                Re: parent::__contruct() prima o dopo Alessandro Pellizzari <shuriken@amiran.it> - 2018-11-26 15:18 +0000
                Re: parent::__contruct() prima o dopo Flavix <imeil@a.a> - 2018-11-26 17:03 +0100
                Re: parent::__contruct() prima o dopo Alessandro Pellizzari <shuriken@amiran.it> - 2018-11-26 16:20 +0000
                Re: parent::__contruct() prima o dopo off line <mail@inva.it> - 2018-11-27 08:25 +0100

csiph-web