PHP对象序列化和Sessions

Oli*_*lay 4 php session

如何将子对象序列化为$ _SESSION?这是我正在尝试的一个例子:

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';}
}

?>
Run Code Online (Sandbox Code Playgroud)

第1页:

<?php
require_once('arraytest.php');
session_start();
$bob = new DoDoDo();
$_SESSION['bob'] = serialize($bob);
?>
Run Code Online (Sandbox Code Playgroud)

第2页:

<?php
require_once('arraytest.php');
session_start();
$bob = unserialize($_SESSION['bob']);
$bob->foo();
print_r($bob->poop->getarray()); // This generates an error.
?>
Run Code Online (Sandbox Code Playgroud)

不知何故,当我反序列化对象时,第1页中ArrayTest分配给对象$poop属性的实例不再存在,第2页在标记行上生成致命错误就证明了这一点:

致命错误:在第6行的非对象上调用成员函数getarray()

Fra*_*ook 7

你的问题不是序列化.类dododo的构造函数有一个bug.您没有引用类对象,而是引用构造函数名称空间内的新变量"poop".你错过了$ this->.

class dododo{
   public $poop;
   public function __construct(){
        $this->poop = new arraytest();
    }
    public function foo()
    {echo 'bar';}
}

它适用于这种变化.