Thread OO-Vererbung für Plugins (49 answers)
Opened by marky at 2012-11-27 11:08

topeg
 2012-11-28 20:53
#163703 #163703
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Nimm den zweiten Ansatz füge etwas Kreativität hinzu und bekommst das:
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/usr/bin/perl
use strict;
use warnings;

###################################################################
package plugin::A;

sub SAVE { print "SAVE von plugin::A($_[0]->{val})\n"; }

1;

###################################################################
package plugin::B;

sub LOAD { print "LOAD von plugin::B($_[0]->{val})\n"; }

1;

###################################################################
package plugin::C;

sub CONVERT { print "CONVERT von plugin::C($_[0]->{val})\n"; }

1;

###################################################################
package klasse;
use Digest::MD5  qw(md5_hex);
my %used;

sub new
{
  my $class=shift;
  my $val=shift;

  my $self={ val  => $val };

  my $obj_unique=$class.'::INSIDE';
  $obj_unique.=chr(int(rand(26)+65)) while($used{$obj_unique});
  $used{$obj_unique}++;
  $self=eval('
    no strict;
    @'.$obj_unique.'::ISA=('.$class.');
    $self->{ISA}=\@'.$obj_unique.'::ISA;
    return bless($self,'.$obj_unique.');
  ');

  return $self;
}

sub SAVE { print "SAVE von klasse($_[0]->{val})\n"; }

sub LOAD { print "LOAD von klasse($_[0]->{val})\n"; }

sub CONVERT { print "CONVERT von klasse($_[0]->{val})\n"; }

sub add_plugins
{
  my $self=shift;
  for(@_)
  { unshift(@{$self->{ISA}},$_) if($_); }
}

1;

###################################################################
###################################################################
###################################################################
package main;

my $klasse=klasse->new('TEST1');
$klasse->add_plugins('plugin::A','plugin::C');
$klasse->SAVE;
$klasse->LOAD;
$klasse->CONVERT;

print "\n###########\n\n";

my $klasse2=klasse->new('TEST2');
$klasse2->add_plugins('plugin::B','plugin::C');
$klasse2->SAVE;
$klasse2->LOAD;
$klasse2->CONVERT;

View full thread OO-Vererbung für Plugins