How is it possible to serialize sub-objects to $_SESSION? Here is an example of what I’m trying:
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';} } ?>
Page 1:
<?php require_once('arraytest.php'); session_start(); $bob = new DoDoDo(); $_SESSION['bob'] = serialize($bob); ?>
Page 2:
<?php require_once('arraytest.php'); session_start(); $bob = unserialize($_SESSION['bob']); $bob->foo(); print_r($bob->poop->getarray()); // This generates an error. ?>
Somehow when I deserialize the object, the ArrayTest instance assigned to the objects’s $poop property in page 1 doesn’t exist any more, as evidenced by the fact that page 2 generates a fatal error on the marked line:
Fatal error: Call to a member function getarray() on a non-object in on line 6
Your problem isn’t serialization. Class dododo’s constructor has a bug. You aren’t referencing the class object, but instead are referring to a new variable ‘poop’ inside of the constructor’s namespace. You’re missing a $this->.
class dododo{ public $poop; public function __construct(){ $this->poop = new arraytest(); } public function foo() {echo 'bar';} }It works fine with this change.