Thread OOP, Parameter fuer Konstruktor pruefen
(9 answers)
Opened by styx-cc at 2007-12-14 15:55
Ich wuerde die Initialisierung in eine eigene sub namens init packen; dann hat der User die Wahl, ob er den Kram gleich beim new mitgeben will oder erst beim init. Dann würde ich object interface methoden schreiben, ueber die auf die einzelnen Attribute zugegriffen werden koennen (und das dann innerhalb der Klasse auch machen)
Code (perl): (dl
)
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; } dann hast du es einfacher, den Kern (hier hashRef) jederzeit auszutauschen ---- Modedit Gwendragon: Quellcode repariert wg. inkorrektem Highlighting ---- perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/ |