Hallo,
meine erstes OO-Projekt läuft erstaunlich gut. Aber eben nicht perfekt.... Ich habe ein Objekt $kunde, das ein paar Objekt vom Typ 'Adresse' enthält. Um das ganze in XML auszugeben habe ich mir ein XMLHelper Objekt gebaut, das ein Array von Kundenobjekten übergeben bekommt und diese in ein XML-File überführen soll. Soweit klar, aber an der Stelle, wo ich aus einem Kunde-Objekt das erste AdressObjekt bearbeiten will passierts,
107 # eine Rechnungsadresse anhängen 108 my $std_rechnungadr = $kunde->getStdRechnungsadr(); 109 bless $std_rechnungadr,"Adresse"; 110 print Dumper($std_rechnungadr). "\n"; 111 my $rechnungadressetmp = CreateRechnunsadresse( 112 $doc, 113 $std_rechnungadr->getfirma1(),
Das blessen klappt, er geht in Adresse.pm und will getfirma1() ausführen.
Not a HASH reference at /home/pummel/data/scripts/bidi/Shop/Adresse.pm line 110.
Dort sieht es so aus:
108 sub getfirma1{ 109 my $self= shift; 110 return $self->{'firma1'}; 111 }
Die Ausgabe meines Dumpers ind Zeile 110 oben bringt:
$VAR1 = bless( do{(my $o = bless( { 'firma1' => 'Superdesigne', 'vorname' => 'Maxe', 'plz_pf' => '', 'briefanrede' => '', 'pf' => '', 'anrede' => 'Herr', 'addressid' => '1523279', 'firma2' => 'GmbH', 'strasse_nr' => '55', 'email' => 'jpuruckherr@cyberport.de', 'titel' => '', 'fax' => '12345689890', 'plz' => '78963', 'name' => 'Mustermanne', 'mobil' => '1224560', 'tel1' => '123455678900', 'land' => 'DE', 'bundesland' => '', 'MY_DBHANDLE' => bless( {}, 'DBI::db' ), 'ort' => 'Testorte', 'strasse' => 'Testwege' }, 'Adresse' ))}, 'Adresse' );
Das gleiche bringt er aus, wenn ich ihn in getfirma1() nochmal dumopen lassen. Gibt es ein Problem mit dem doppelten Blessing? Dies entsteht einmal beim Erzeugen des Adressobjektes und dann eben im XML-Helper. Wo ist der Wurm?
Mit freundlichen Grüßen
Jens Puruckherr
"Jens Puruckherr" jpuruckherr@cyberport.de writes:
108 my $std_rechnungadr = $kunde->getStdRechnungsadr(); 109 bless $std_rechnungadr,"Adresse";
Die Funktion getStdRechnungsadr() sollte bereits ein Objekt der Klasse "Adresse" liefern, also intern z.B. ein
$a = Adresse->new(); # ... return $a;
ausführen.
In der eigentlichen Applikation solltest Du kein bless brauchen, das sollte auf niederer Ebene, konkret im Konstruktor verborgen sein.
Bless nutzt man, um OO zu realisieren, in der Anwendungslogik sollte es nicht auftauchen.
Den Rest hab' ich jetzt nicht weiterverfolgt.
Das OO-Tutorial via "man perltoot" ist IMHO ganz brauchbar für diese Sachen.
GreetinX Steffen
lug-dd@mailman.schlittermann.de