Thread OO: Ein paar Fragen zu Super (4 answers)
Opened by roooot at 2008-06-16 16:07

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 :)

View full thread OO: Ein paar Fragen zu Super