Thread Problem bei Objekten in Klassenvariablen (13 answers)
Opened by Gast at 2005-01-05 23:36

Strat
 2005-01-07 00:12
#50610 #50610
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=m1chaeL-,05.01.2005, 23:31]Warum klappt es manchmal (bei einfachen Datentypen) auch mit dem return $class?[/quote]
solange du keine attribute hast, funktioniert return $class auch, nur rufst du die methode dann nicht als objektmethode (d.h. auf das Objekt $self), sondern als Klassenmethode (auf die Klasse $class) auf, was ein ziemlicher unterschied ist, weil du in $self zwar was speichern kannst, in $class aber nur der Klassenname als skalarer wert steht.

$class->new() uebergibt den Namen der Klasse als ersten Parameter
$object->new() uebergibt das Objekt als ersten parameter

manchmal sieht man in einem konstruktor (z.B. ->new) folgende zeilen
Code: (dl )
1
2
3
4
5
6
sub new {
my $proto = shift;
my $class = ref($proto) || $proto;

bless ({}, $class);
}

die zeile:
my $class = ref($proto) || $proto ist da interessant:
wenn z.B. $object->new()
dann liefert ref($proto) den Namen der Klasse des objektes;
wenn $class->new()
dann liefert ref($proto) eine leere zeichenkette, weil ja der Klassenname ein string ist und keine referenz, dadurch wird das || ausgewertet und $proto (d.h. der Klassenname) dann $class zugewiesen.

aber so einen dualen konstruktor (als klassen- und objektmethode) finde ich nicht schoen; wenn man ein objekt klonen will, kommt meistens $object->clone() besser...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/

View full thread Problem bei Objekten in Klassenvariablen