Thread Von CGI.pm Methods erben
(25 answers)
Opened by rosti at 2011-04-12 10:35
Jetzt wirds richtig interessant, danke Dir. Naja, ich war ja auch nicht faul und die lieben Mitleser wollen ja auch was davon haben, also, bischen Code zum Thema Inherit Methods ;)
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 package Foo; # BaseClass sub new{ my $class = shift; return bless {}, $class; } sub fx{ my $self = shift; $self->{FX} = "xxxxxxxxxxxxx xxxxxxxxxxxxxx xxx"; } ########################################################################### package Bar; use base 'Foo'; # Inherit from Foo sub new{ my $class = shift; my $foo = $class->SUPER::new; return bless {FOO => $foo}, $class; } ######################## OVERLOAD Foo::Methods ############################ sub fx{ my $self = shift; $self->{FOO}->SUPER::fx; } ########################################################################### package main; use Data::Dump qw(dump); my $o = Bar->new; $o->fx; print dump($o); # alles am rechten Platz Mit meinem Perl v5.6.1 funktioniert das einwandfrei und widerspricht auch nicht OOP: die geerbten Methods werden überschrieben und mit der Superklasse aufgerufen. Beim Aufruf ist $self->{FOO} in der Method der Superklasse dann $self ohne FOO und die Attribute landen an der richtigen Stelle (mundartlich, sorry). Aber jetzt die Frage: Funktioniert dass denn in höheren Perl-Versionen nicht mehr? --rosti Edit: Mit UNIVERSAL::isa kann die Vererbung auch geprüft werden: Code (perl): (dl
)
print $o->UNIVERSAL::isa('Bar'); # Bar => 1, Foo => 1 Von UNIVERSAL erben alle Perl-Module. Last edited: 2011-04-12 17:47:54 +0200 (CEST) |