Christian Kruse: spezielle Objektreferenzen und deren weitergabe

Beitrag lesen

Hallo,

Soweit so gut. Nun gebe ich aber mit einem Formular diese Referenz weiter, da
ich das nun woanders bearbeiten will. Ich mache das über ein hidden etc. Ist
jedenfalls egal.

Das ist durchaus nicht egal.

Ankommen tut auch alles wie es soll. Sprich, ich kann in dem zweiten Script
wieder problemlos auf $spieler zugreifen. Also auf die Referenz.

print $spieler; hat dann zur ausgabe:SPIELEROBJEKT=HASH(0x80fa20c)

Also alles schön und gut ... nur leider IST es nicht mehr mein Objekt! Keine
Ahnung wieso er das macht. Aber, $spieler ist KEIN Spielerobjekt mehr. Es ist
nur noch ein String. nix mehr. OK, nicht so schlimm dachte ich mir:

$spieler = bless($spieler , SPIELEROBJEKT);

und alles müsste wieder in butter sein ... nix da.

Can't bless non-reference value at ...

Kein Wunder. Das Script ist zuende gelaufen und der Garbage Collector hat das
Objekt eingesammelt und den belegten Speicher wieder freigegeben.

Naja, und an dem Punkt hörten dann meine Ideen auf ... Ich meine, WAS ZUM
TEUFEL muss ich machen, damit ich wieder an mein Objekt komme???

Es gibt zwei Moeglichkeiten: entweder, du serialisierst dein Objekt und
entserialisierst es dann wieder, oder du benutzt Technologien wie CORBA. Das
serialisieren und wieder entserialisieren hat den entscheidenden Nachteil, dass
es extremste Sicherheitsluecken bietet: jeder koennte sich ein beliebiges
Objekt zusammenschustern, wenn er mal dein Format durchschaut hat. CORBA hat
den Nachteil, dass ein Daemon-Prozess im Hintergrund laufen muss.

Ich schlage vor, dass du dein Software-Design ueberarbeitest.

Gruesse,
 CK