10 Einträge, 1 Seite |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
sub new { ref (my $class = shift) && croak 'class name needed in constructor'; my $self = {@_}; $self->{$_} = $self->{$_} || '' for(qw/db user pass/); bless $self, $class; $self->connect(); $self; } sub connect { my $self = shift; my $dbh = DBI->connect("dbi:mysql:$self->{'db'}", $self->{'user'}, $self->{'pass'}) || croak "DB-error: $DBI::errstr\n"; $self->{'db_handle'} = $dbh; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
my %parameter = @_; my %option = ( '-db' => 'required', '-user' => 'required', '-pass' => 'required', '-extra' => 'optional', ); foreach my $parameter (keys %parameter){ unless (exists $option{$parameter}){ warn "Unknown parameter '$parameter'"; next; } # und so weiter... }
#Kein Kommentar+2007-12-14 17:56:46--Sollte, ja. Aber wer hindern den Benutzer daran?aber naja, $obj->{user} sollte von dem benutzer des moduls sowieso nicht
benutzt werden, ...
Struppi+2007-12-14 19:27:30--#Kein Kommentar+2007-12-14 17:56:46--Sollte, ja. Aber wer hindern den Benutzer daran?aber naja, $obj->{user} sollte von dem benutzer des moduls sowieso nicht
benutzt werden, ...
Struppi+2007-12-15 13:03:54--daher würde ich die Prüfung eben in den Aufruf von connect verpacken, sinnvollerweise z.b. über -param => 'value', dann läßt sich die Funktion leicht anpassen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
sub check_mysql_params { my( $self ) = @_; foreach my $attr ( qw( db username pass ) ) { unless( defined $self->$attr ) { croak( "Error: attribute '$attr' not set" ); } } # eventuell hier noch den connect testen return $self; } # check_mysql_params sub init { my( $self, %params ) = @_; # parameter hier setzen my $driver = $self->driver || 'mysql'; my $checkDriverParamsMethod = "check_${driver}_params"; if( $self->can( $checkDriverParamsMethod ) { $self->$checkDriverParamsMethod; } else { croak "Error: no method '$checkDriverParamsMethod' existing"; } } # init
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
my @objectInterfaceMethods = qw( db user pass db_handle ); foreach my $method ( @objectInterfaceMethods ) { # anonyme sub erzeugen my $sub = sub { my( $self, @params ) = @_; $self->{ $method } = $params[0] if @params; return $self->{ $method }; }; # sub # sub in der symboltabelle unter dem Namen $method verankern no strict 'refs'; *{ $method } = $sub; } # foreach sub new { my( $class, @params ) = @_; croak 'class name needed in constructor' if ref $class; my $self = bless( {}, $class ); $self->init( @params ) if scalar @params; return $self; } sub init { my( $self, %params ) = @_; foreach my $param ( keys %params ) { if( $self->can( $param ) ) { $self->$param( $params{$param} ); } else { croak( "Invalid param '$param'" ); } } # foreach # hier eventuell noch ueberpruefen, ob alle benoetigten parameter gesetzt sind # ... $self->connect(); return $self; } sub connect { my $self = shift; my $dbh = DBI->connect("dbi:mysql:" . $self->db, $self->user, $self->pass) or croak "DB-error: $DBI::errstr\n"; $self->db_handle( $dbh ); return $self; }
pktm+2007-12-14 21:19:24--Nichts.So wirklich hindern kannst du den Benutzer nicht daran, außerd du verwendest die entsprechenden Techniken.
Aber das soll *dich* ja nicht daran hindern eine ordentliche Initialisierung zu forndern :)
10 Einträge, 1 Seite |