单例序列化
经典的单例模式代码如下
class Singleton
{
private static $instance;
// 防止外部实例化
private function __construct(){}
// 防止克隆
private function __clone(){}
// 防止 serialize
private function __sleep(){}
// 防止 unserialize
private function __wakeup(){}
public function getInstance()
{
if (self::$instance == null) {
self::$instance = new self;
}
return self::$instance;
}
}
如果希望能够序列化,需要如下改动
class Singleton
{
private static $instance;
// 防止外部实例化
private function __construct(){}
// 防止克隆
private function __clone(){}
// 反序列化后反馈该对象
private function __wakeup()
{
self::$instance = $this;
}
public function getInstance()
{
if (self::$instance == null) {
self::$instance = new self;
}
return self::$instance;
}
}