2025年6月7日 星期六 乙巳(蛇)年 三月十一 夜 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > PHP

PHP Serialize 序列化 / Unserialize 反序列化

时间:12-14来源:作者:点击数:6
城东书院 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
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐