Objekt-Persistierung in Session

ahykes

Erfahrenes Mitglied
Hallo und Guten Abend. Ich bin etwas..nein ziemlich am Ende mit meinem Latein. Es geht darum ein Objekt in der Session abzulegen.
Prinzipiell geht es ja so:

1.) Defintion händisch oder per Autoload laden
2.) Dann wieder(-verwenden)

Um es kurz zu machen: Was passiert mit Objekten, die im persistierten Objekt liegen? In meinem Konkreten Fall werden diese Unterklassen zwar angelegt, sind aber leer! Eigenschaften = NULL!

Beispiel:

Klasse Auto enthält n Klassen Teile

Auto lässt sich persistieren.
Auto enthält zwar Teile; jedoch sind alle Teile mit leeren Eigenschaften versehen (NULL)

Was kann ich tun? Habt ihr Rat?
 
DANKE! Bin leider gerade nicht mehr an meinem Rechner... aber ich nutz nicht die Serialisierungsmethoden...Ich dachte immer in der Session wird doch sowieso alles serialisiert, oder? Ich mache einfach:
PHP:
$_SESSION['a'] = new Auto();
$_SESSION['a']->addTeil("Tür");
 
Mh, jup, du hast recht. Aber ich würde lieber explizit serialisieren und auch nur das "Endobjekt" in die Session reinlegen. Also was du da so machst habe ich noch nie gesehen und es ist auch nicht unbedingt sinnvoll.
 
Mhm..okay. Warum ? Was wäre der richtige Weg? Es geht um Artikel mit viele Attributen... Das macht mit Arrays keinen Spass****** :-)
 
So?

PHP:
<?php
$auto = new Auto();
$auto->addTeil("Tür");
$_SESSION['a'] = serialize($auto);

Achja, nochwas zum generellen Objektdesign: Injiziere lieber Objekte des Types "Teil" anstatt die automatisch in der Klasse zu generieren ;) Stichwort dependency injection.
 
Also sagen wir mal so: Es hat sich nichts verändert. :-/ Alle unter Objekte von BLFSessionArticle sind leer. Es ist fast so als würde nur Objekte der ersten Ebene mitnehmen...
PHP:
if($_SESSION["sessionArticles"] != null){
	$sessionArticles = unserialize($_SESSION["sessionArticles"]);
}
	
if($sessionArticles == null){
	$sessionArticles = new BLFOrderData();
}

/*
 * wenig später
 */
$sessionArticles->addArticle( new BLFSessionArticle($article[0]) ); // Enthält ein Array mit anderen Objekten..

$_SESSION["sessionArticles"] = serialize($sessionArticles);

Ich werde wohl etwas anderes als Objekte nehmen müssen. Langsam hab ich keinen Bock mehr auf diese Sprache... :-(
 
UNFASSBAR! Ich habe es hinbekommen. Im Prinzip habe ich nichts verändert!! Es lag an einer meiner Subklassen. Eine davon hatte die __sleep()-Methode definiert:
PHP:
public function __sleep(){
 	return array('collection', 'type');
}

Das stammt noch aus den ersten Versuchen, Objekte in die Session abzulegen! Ich hatte das mal irgendwo gelesen. Sehr cool: Mein Frieden mit PHP ist nun wieder hergestellt!
 
Zurück