Wie ein Objekt innerhalb seiner Klasse in der Session speichern?

X-Color

Erfahrenes Mitglied
Hallo,
ich bräuchte wieder euren Rat :-) Ich möchte ein Objekt in der Session ablegen, allerdings möchte ich die Funktion innerhalb der Klasse, in einer Methode ausführen.
$_SESSION['objekt'} = $this; hat mir leider nur eine Exception um die Ohren geworfen.
Sind euch da andere Möglichkeiten bekannt?

Danke für eure Hilfe,
Gruß X-Color
 
Direkt kann man in Sessions ein Object nicht abbilden.
Du könntest das Objekt erst serialisieren (http://php.net/serialize) und dann einem Arrayelement der Session zuweisen. Später dann das element wieder "entpacken" und weiter arbeiten.

Bsp:

PHP:
session_start();

$x = new klasse();   // eine Klasseninsanzt erstellen
$x->bla = 5;            // Bsp klassenvariable wert zu weisen

echo "<pre>";
var_dump($x);
echo "</pre>";

$_SESSION['blub'] = serialize($x);
echo "<pre>";
var_dump($_SESSION['blub']);    // nur Demoausgabe wie es aussieht
echo "</pre>";

$y = unserialize($_SESSION['blub']);
echo "<pre>";
var_dump($y);
echo "</pre>";

echo $y->bla; // sollte wieder 5 hier stehen
 
Ich hab das ganze mal zum test ausprobiert.
Das war mein Resultat...

PHP:
<?php
class user{
    protected $name;
    protected $id;
    public function __construct($name, $id){
        $this->name = $name;
        $this->id = $id;
    }
    public function __destruct(){
        unset($this);
    }
//user...
}
session_start();
if(!$_SESSION["object"]){
    $user = new user("chris", 10);
    $_SESSION["object"] = $user;
}else{
    print "<pre>";
    var_dump($_SESSION);
    print "</pre>";
}
?>
Ergebniss bei ausgabe des DUMPS
PHP:
array(2) {
 ["login_challenge"]=>
  &string(32) "8d0d5ba0cde22664903b696e72ce3e49"
  ["object"]=>
  &object(user)#1 (2) {
    ["name:protected"]=>
    string(5) "chris"
    ["id:protected"]=>
    int(10)
  }
}
Mir ist bei deiner Schreibweise nur ein kleiner fehler aufgefallen:
Nicht: </span>
$_SESSION['objekt'} = $this;
sondern
$_SESSION['objekt'] = $this;

womöglich hilft das ja.
CU
 
Zurück