Thread Cookie Informationen gehen verloren (8 answers)
Opened by Onkel_Tuka at 2012-04-24 18:34

rosti
 2012-04-25 19:41
#157847 #157847
User since
2011-03-19
3505 Artikel
BenutzerIn
[Homepage]
user image
Quote
Ich denke der Kontakt zum CGI-Modul ist nicht mehr vorhanden ... aber wie kann man diese "Umgebungsdaten" an andere Module weitergeben?


Stichworte: Vererbung, Delegation
Letztere ist eine feine Sache ;)

Delegation:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
package BasisModul;

use CGI;

sub new{
  my $class = shift;
  my $self = bless{
    CGI => CGI->new,
  }, $class;
  return $self;
}


Jetzt hat die Instanz vom BasisModul ein Attribut {CGI}. Damit nun diese Instanz die CGI::param()-Funktion aufrufen kann, wird diese delegiert:

Code (perl): (dl )
1
2
3
4
5
6
7
# in package BasisModul
sub param{
  my $self = shift; # Instanz
  return $self->{CGI}->param(@_);
}
# später dann einfach
# $self->param();


Wenn weitere Klassen von BasisModul erben, wird dann auch die param()-Methode geerbt.

Von 'Modul zu Modul hangeln' ist kein guter Weg, die Erfahrung habe ich gemacht. Und i.d.R. ist eine Vererbung über mehr als 2 Instanzen im Nachhinein schwer durchschaubar. Vielmehr gibt es immer die Möglichkeit, weitere/fremde Klassen bei Bedarf anzubinden oder auch Instanzen anderer Klassen als Attribute der eigenen Klasse zu erzeugen ohne von den fremden Klassen alle Methoden erben zu müssen.

Anbindung:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
package Foo;
our @ISA = qw(BasisModul); # Erbschaft von der Basis
use IO::File;

# gebraucht wird ein FileHandler in foo()
sub foo{
  my $self = shift;
  my $fh = IO::File->new;
  # oder 
  $self->{FH} = IO::File->new; # Vorsicht! Denke an bestehende Attrs!

  $fh->open(...);
}


--Rosti

View full thread Cookie Informationen gehen verloren