Thread Klasse mit Parameter in der Subroutine
(2 answers)
Opened by tino91DE at 2014-07-03 14:42
Hallo,
ich schlage mich gerade mit einer Klasse rum. "new" erzeugt einen Datenbanklink für die gesammte Klasse. Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 sub new { @_ == 2 || die 'Usage: class->new($db)'; my ($class_session, $db) = @_; my $self = bless { db => $db, sessionLang => 'en', sessionID => '', sessionLiveTime => 900, }, $class_session; return $self; } In allen Subroutinen der Klasse greife ich dann auf den Datenbanklink zu: Code (perl): (dl
)
1 2 3 4 5 6 sub getUsername { my $self = shift; $sth = $self->{db}->prepare($sql) || die "cannot prepare query, errmsg = $DBI::errstr"; } Ziel ist es eine Subroutine der Klasse mit weiteren Parametern aufzurufen. Das ganze soll dann wie folgt aussehen: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 use session; my $dbh = DBI->connect($dsn, $user, $password) || die "can't connect, errmsg = $DBI::errstr"; my $session = session->new($dbh); if($session->session()){ # Session aktiv # Hier werden nun weitere Routinen der Klasse aufgerufen print $session->getUsername; # Das Problem print $session->getField("parameterA","parameterB"); }else{ # Session nicht aktiv } Leider kann ich die Subroutine getField aus der Klasse nur entweder mit dem Datenbanklink ODER mit den Parametern aufrufen. Lasse ich $self weg, kommen die Parameter an, der DBI Link geht aber nicht mehr. Nutze ich $self, funktionieren die Parameter nicht mehr aber die Datenbank ist ansprechbar. Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 sub getField{ my $self = shift; my $usernamestring = $_[1]; my $type = $_[0]; $sth = $self->{db}->prepare($sql) || die "cannot prepare query, errmsg = $DBI::errstr"; } Aus folgenden Tut habe ich versucht $self mit CORE::shift anzusprechen, leider hatte ich auch damit kein Erfolg. Kann mir jemand weiterhelfen? |