您当前的位置:首页 > 计算机 > 编程开发 > PHP

PHP Serialize 序列化 / Unserialize 反序列化

时间:12-14来源:作者:点击数:
城东书院 www.cdsy.xyz

我们经常采用如下方式定义单列:

class Singleton {
    private static $instance = NULL;
    /** 不容许直接调用构造函数 */
    private function __construct() {
    }
    /** 不容许深度复制 */
    private function __clone() {
    }
    public static function getInstance() {
        if (NULL === self::$instance) {
             self::$instance = new self();
          }
        return self::$instance;
    }
}

很多人都会记得对深度 copy 的保护,但其实我们却疏忽了一点:

<?php
$a = Singleton::getInstance();
$b = unserialize(serialize($a));
var_dump($a === $b);
//bool(false)

可见还需要修补,加上对序列化的保护:

class Singleton {
    private static $instance = NULL;
    /** 不容许直接调用构造函数 */
    private function __construct() {
    }
    /** 不容许深度复制 */
    private function __clone() {
    }
    /** 不容许serialize */
    private function __sleep() {
    }
    /** 不容许unserialize */
    private  function __wakeup() {
    }
    public static function getInstance() {
        if (NULL === self::$instance) {
             self::$instance = new self();
          }
        return self::$instance;
    }
}
城东书院 www.cdsy.xyz
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐