Hallo,
ich schlage mich gerade mit einer Klasse rum. "new" erzeugt einen Datenbanklink für die gesammte Klasse.
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:
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:
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()){
print $session->getUsername;
print $session->getField("parameterA","parameterB");
}else{
}
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.
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?