How is it possible to serialize sub-objects to $_SESSION? Here is an example of what I'm trying:
<?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';}
}
?>
<?php
require_once('arraytest.php');
session_start();
$bob = new DoDoDo();
$_SESSION['bob'] = serialize($bob);
?>
<?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.
It has got nothing to do with serialization. It doesn't exist in the first place. You've got it wrong in the constructor, should be:
public function __construct(){
$this->poop = new arraytest();
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With