Schrift
[thread]12021[/thread]

OO: Ein paar Fragen zu Super

Tags: Ähnliche Threads

Leser: 1


<< >> 5 Einträge, 1 Seite
roooot
 2008-06-16 16:07
#111062 #111062
User since
2008-03-03
276 Artikel
BenutzerIn
[default_avatar]
Hallo.

Ich habe nun mal ein paar Versuche mit Super gestartet.

Dazu hier meine "basis" Klasse:
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
package Gallery;
use strict;

my $VERSION = '1.0';


use Class::Std::Utils;
use Carp;


### s -- vars used in this package

my %known_parameters_of;
my %session_of;
my %outputtype_of;


### e


sub new {
    
    my ($class, $arg_ref) = @_;
    
    my $new_object = bless anon_scalar(), $class;
    
    ### extract inits from arguments:
    my %init = extract_initializers_from($arg_ref);
    
    ### insert known parameters
    $known_parameters_of{ident $new_object} = $init{'parameters'};
    $outputtype_of{ident $new_object}       = 
        $init{'parameters'}->{'OutputType'};
    $session_of{ident $new_object}          = $init{'session'};  
    
    return $new_object;
    
}


und hier meine untergeordnete Klasse:
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
package Gallery::Category;
use strict;

my $VERSION = '1.0';


use Class::Std::Utils;
use Carp;
use base qw( Gallery );


### s -- vars used in this package

my %id_of;


### e


sub new {    
    
    my ($class, $arg_ref) = @_;
    
    my $new_object = $class->SUPER::new($arg_ref);    
    my $ident = ident $new_object;    

    ### extract inits from arguments:
    my %init = extract_initializers_from($arg_ref);
    
    ### insert known parameters
    $id_of{$ident} = $init{'id'};
    
    return $new_object;
    
}

Nun habe ich eine Frage: Wie kann ich in Gallery::Category auf zum Beispiel $session_of zugreifen? Ich habe es über
Code (perl): (dl )
my $session = $SUPER::session{ident $self}
versucht, wobei $self die Klasse ist: ($self) = @_



Der Aufruf geschieht so:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
require Gallery::Category;
new Gallery::Category({
    'Gallery' =>{
        parameters => _create_parameter_hash($query->url_param),
        session    => $session, 
    },
    'Gallery::Category' => {
        id         => $json->{'ppid'},
    },
});


Ein kurzes Beispiel genügt mir. Danke euch!
Viele Grüße :)
Strat
 2008-06-16 17:02
#111069 #111069
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
auf variablen anderer klassen kannst du nicht so ohne weiteres zugreifen (ausser wenn es sich um packagevariablen handelt)..

warum schreibst du dir in Gallery nicht einen Getter-Setter dafür? Dann kannst du in der abgeleiteten Klasse einfach mit
Code (perl): (dl )
1
2
$self->session( $session1 );
my $session2 = $self->session();

zugreifen, oder wenn es ->session in Gallery::Category schon gibt, dann halt noch ein SUPER dazwischen
Code (perl): (dl )
$self->SUPER::Session( $irgendwas );
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
betterworld
 2008-06-16 17:11
#111074 #111074
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
my-Variablen bringen eigentlich nur etwas, wenn man sie innerhalb des Blocks, wo sie deklariert werden, auch benutzt. So ist das auch mit $VERSION. Daher solltest Du $VERSION lieber mit our deklarieren, sonst ist es relativ überflüssig. Auf $VERSION wird nämlich gern auch von anderen Modulen zugegriffen.
roooot
 2008-06-16 17:45
#111077 #111077
User since
2008-03-03
276 Artikel
BenutzerIn
[default_avatar]
ok das mit $VERSION werde ich ändern und ich werde mir noch getter setter Funktionen basteln. Danke für die Anregungen. Ich dachte nur dass man direkt drauf zugreifen kann, weil man ja im "eine" Klasse hat, also quasi, irgendwie :)
Viele Grüße :)
renee
 2008-06-16 18:16
#111081 #111081
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
roooot+2008-06-16 15:45:34--
ok das mit $VERSION werde ich ändern und ich werde mir noch getter setter Funktionen basteln. Danke für die Anregungen. Ich dachte nur dass man direkt drauf zugreifen kann, weil man ja im "eine" Klasse hat, also quasi, irgendwie :)


"private" Sachen werden auch in anderen Sprachen nicht vererbt...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< >> 5 Einträge, 1 Seite



View all threads created 2008-06-16 16:07.