Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > it.comp.www.php > #22371
| Path | csiph.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail |
|---|---|
| From | Alessandro Pellizzari <shuriken@amiran.it> |
| Newsgroups | it.comp.www.php |
| Subject | Re: parent::__contruct() prima o dopo |
| Date | Mon, 26 Nov 2018 15:18:03 +0000 |
| Lines | 67 |
| Message-ID | <g62h5bFssoU1@mid.individual.net> (permalink) |
| References | <pt8bik$jv7$1@gioia.aioe.org> <g5sin5Flg5vU2@mid.individual.net> <ptbka8$1uvd$1@gioia.aioe.org> <g5t3b2Fp484U1@mid.individual.net> <ptbpir$all$1@gioia.aioe.org> <g5vecfFac48U2@mid.individual.net> <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> |
| Mime-Version | 1.0 |
| Content-Type | text/plain; charset=iso-8859-15; format=flowed |
| Content-Transfer-Encoding | 8bit |
| X-Trace | individual.net ATuiTCKcBvKLxmVYilVrgg87wY2eBrGnSmnpmHnsepLZdxwyQ= |
| Cancel-Lock | sha1:U78kVa7cRZGwSC3MaHi4BoCV7oo= |
| User-Agent | Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 |
| In-Reply-To | <ptgndd$mh$1@gioia.aioe.org> |
| Content-Language | en-GB |
| Xref | csiph.com it.comp.www.php:22371 |
Show key headers only | 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 | Next — Previous in thread | Next in thread | Find similar | Unroll 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