de.comp.lang.php.* FAQ

29.13. Wie speichere ich Objekte in Sessions?

Antwort von Clemens Koppensteiner

Man kann Objekte genau wie alle anderen Typen in Sessions speichern indem man sie in den $_SESSION-Array speichert. Zu beachten ist dabei allerdings, dass auf jeder Seite, in der auf die Session zugegriffen wird (in der also session_start() aufgerufen wird), auch die Klassendefinition eingebunden sein muss. Falls sich diese in einer seperaten Datei befindet, muss sie vor session_start() inkludiert werden. Wenn keine Klassendefinition vorhanden ist, stellt PHP die Klassenfunktionen nicht wieder her - die Klasse ist somit meistens nutzlos.

Oft muss man ein Objekt aufräumen, bevor es am Ende des Skriptes gespeichert (serialisiert) wird. Dazu dient dient die "magische" Funktion __sleep() . Diese wird vor dem Serialisieren des Objekts von PHP aufgerufen. Sie muss einen Array mit allen Variablen des Objektes zurückgegben, die gespeichert werden sollen.

Ihr Gegenstück ist die Funktion __wakeup() . Sie wird beim Wiederherstellen des Objektes aufgerufen.

class myClass {

var $id;
var $text;
var $db;

function getText() {
	return $this->text;
}

function setText($text) {
	$this->text = $text;
	// schreibe Text in die Datenbank
	[...]
}

function __sleep() {
	// schließe die Datenbankverbindung
	$this->db->disconnect();
	
	return array('id', 'text');
}

function __wakeup() {
	// stelle die Datenbankverbindung wieder her
	$this->db = new DB([...]);

	// hole den Text aus der Datenbank
	[...]
}
}

Valid HTML 4.01! Valid CSS!

29.13. Wie speichere ich Objekte in Sessions?
http://www.php-faq.de/q/q-sessions-objekte.html
Archiv der de.comp.lang.php-FAQ Dies ist eine Archivseite von 2008 und wurde seitdem nicht geändert. Das dclp-FAQ-Team