PHP Objekt-Serialisierung und-Sitzungen
Wie ist es möglich, zu serialisieren, die sub-Objekte zu $_SESSION? Hier ist ein Beispiel, was ich versuche:
arraytest.php:
<?php
class ArrayTest {
private $array1 = array();
public function __construct(){
$this->array1[] = 'poodle';
}
public function getarray(){
return $this->array1;
}
}
class DoDoDo {
public $poop;
public function __construct(){
$poop = new ArrayTest();
}
public function foo()
{echo 'bar';}
}
?>
Seite 1:
<?php
require_once('arraytest.php');
session_start();
$bob = new DoDoDo();
$_SESSION['bob'] = serialize($bob);
?>
Seite 2:
<?php
require_once('arraytest.php');
session_start();
$bob = unserialize($_SESSION['bob']);
$bob->foo();
print_r($bob->poop->getarray()); //This generates an error.
?>
Irgendwie wenn ich Deserialisieren das Objekt, das ArrayTest
Instanz, die den Objekten zugewiesen ist $poop
Eigenschaft in Seite 1 nicht mehr vorhanden, wie durch die Tatsache belegt, dass Seite 2 erzeugt einen schwerwiegenden Fehler, auf der markierten Linie:
Fatal error: Call to a member function getarray() on a non-object in Zeile 6
- Schön Variablennamen.
- Versucht, Sie zu ändern, als ich sah, Sie waren nicht politisch korrekt. Scheint ich nicht. Wird es nicht wieder tun.
- Beispielhafte Beispiel-code; klare, präzise, genau die Art von Sache, die Sie suchen, wenn Sie die Beantwortung einer Frage. Ich bin froh, dass Sie nicht in der Lage, ändern Sie den Namen der Variablen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihr problem ist nicht die Serialisierung. Klasse dododo Konstruktor hat einen bug. Sie sind nicht verweisen auf das class-Objekt, sondern bezieht sich auf eine neue variable "poop" innerhalb der Konstruktor-namespace. Ihnen fehlt ein $this->.
Funktioniert es einwandfrei mit dieser änderung.
Es hat nichts zu tun mit der Serialisierung. Es existiert nicht in den ersten Platz. Du hast es falsch im Konstruktor werden sollte: