symbolicky odkaz na balik

Honza Pazdziora adelton na informatics.muni.cz
Pondělí Červenec 27 14:00:27 MEST 1998


> Dobry den,
> 
> pri vytvareni jedne podtridy jsem zjistil, ze potrebuju, 
> aby promenna nadtridy, ktere je vytvorena jako instance
> tridy IO::Socket::INET (ta promenna, ne nadtrida), byla
> misto toho instanci z ni odvozene tridy HTTP::Daemon.

Jestli to dobre chapu, tak to $self zde je instance nejake dalsi,
treti tridy, a z te vy dedite v nejake ctvrte tride. A vy chcete,
aby pouzivaly jiny objekt pro ten socket.

> Jako nejuspornejsi moznost mi prislo pred vytvorenim 
> one instance (deje se tak v metode jmenem Bind) napsat neco
> jako 
> 
>     $pkg = $self->{'socket_pkg'} || 'IO::Socket::INET';	(*) 
> 
> a pak puvodni
> 
>     $self->socket = IO::Socket::INET->new(...)

Nema tady byt $self->{'socket'}?

> zmenit na obecnejsi
> 
>     $self->socket = $pkg->new(...);			(**)
> 
> s tim, ze v me odvozene tride predefinuju metodu Bind necim
> jako
> 
>     $self->{'socket_pkg'} = 'HTTP::Daemon';
>     $self->SUPER::Bind();
> 
> Prekvapilo me, ze to opravdu funguje, a ani perl -w ani
> use strict proti tomu nic nenamitaji.
> 
> Chtel bych se ale zeptat, nakolik se tohle da povazovat za
> slusny/vhodny/celkove pozitivni postup (a jestli to neni moc
> velka prasarna na to, abych si moh dovolit autora puvodni tridy
> otravovat s tim, ze by mel do ni pridat radky (*) a (**) :)

No, vypada to rozumne, ale: nakolik jsou IO::Socket::INET
a HTTP::Daemon kompatibilni? Nevim, co je ta trida, ze ktere dedite,
ale pokud se pouziva nejak sireji a autor by tam pridal tuhle moznost,
tak si mozna zadelava na problemy, kdyz to lidi zacnou (spatne)
pouzivat. Kazdopadne za mail autorovi (nebo kdo je uveden jako
spravce) to stoji.

Druha moznost pak je udelat v tom Vasem Bindu dalsi bless uz na ten
vytvoreny socket -- data tim neznicite a budete to mit v nove tride,
takze to pojede s novymi metodami. Jakoze

	bless $self->{'socket'}, HTTP::Daemon;

------------------------------------------------------------------------
 Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
                   I can take or leave it if I please
------------------------------------------------------------------------


Další informace o konferenci Perl