PHP自定义序列化接口Serializable用法分析


Posted in PHP onDecember 29, 2017

本文实例讲述了PHP自定义序列化接口Serializable用法。分享给大家供大家参考,具体如下:

PHP Serializable是自定义序列化的接口实现此接口的类将不再支持__sleep()和__wakeup(),当类的实例被序列化时将自动调用serialize方法,并且不会调用 __destruct()或有其他影响。当类的实例被反序列化时,将调用unserialize()方法,并且不执行__construct()。接口摘要如下:

Serializable {
  abstract public string serialize ( void )
  abstract public mixed unserialize ( string $serialized )
}

例子说明:

<?php
/**
 * 类自定义序列化相关操作
 *
 * @author 疯狂老司机
 */
class obj implements Serializable {
  private $data;
  private $step = 0;
  /*
   * 构造函数
   */
  public function __construct() {
    $this->data = "这是一段测试文字<br>";
    echo '调用构造函数<br>';
  }
  public function serialize() {
    return serialize($this->data);
  }
  public function unserialize($data) {
    $this->step++;
    $this->data = unserialize($data);
  }
  /*
   * 析构函数
   */
  public function __destruct() {
    echo 'step:'.$this->step.' 调用析构函数<br>';
  }
  public function getData(){
    return $this->data;
  }
}
$obj = new obj;// 调用obj::__construct
$ser = serialize($obj);// 调用obj::serialize
$newobj = unserialize($ser);// 调用obj::unserialize
echo $newobj->getData();// 调用obj::getData
// 执行结束,调用析构函数,先执行newobj对象的析构函数在执行obj对象的析构函数
?>

以上例子输出:

调用构造函数
这是一段测试文字
step:1 调用析构函数
step:0 调用析构函数

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php 正则表达式小结
Aug 31 PHP
PHP GD 图像处理组件的常用函数总结
Apr 28 PHP
由php的call_user_func传reference引发的思考
Jul 23 PHP
将博客园(cnblogs.com)数据导入到wordpress的代码
Jan 06 PHP
php实现与erlang的二进制通讯实例解析
Jul 23 PHP
PHP制作万年历
Jan 07 PHP
smarty模板引擎之内建函数用法
Mar 30 PHP
PHP直接修改表内容DataGrid功能实现代码
Sep 24 PHP
PHP的Yii框架中View视图的使用进阶
Mar 29 PHP
PHP实现的获取文件mimes类型工具类示例
Apr 08 PHP
ThinkPHP 5.1 跨域配置方法
Oct 11 PHP
PHP 实现缩略图
Mar 09 PHP
PHP检测接口Traversable用法详解
Dec 29 #PHP
PHP聚合式迭代器接口IteratorAggregate用法分析
Dec 28 #PHP
PHP迭代器接口Iterator用法分析
Dec 28 #PHP
PHP数组式访问接口ArrayAccess用法分析
Dec 28 #PHP
PHP获取数组中指定的一列实例
Dec 27 #PHP
快速解决PHP调用Word组件DCOM权限的问题
Dec 27 #PHP
详解Yaf框架PHPUnit集成测试方法
Dec 27 #PHP
You might like
无线电的诞生过程
2021/03/01 无线电
str_replace只替换一次字符串的方法
2013/04/09 PHP
PHP输出XML到页面的3种方法详解
2013/06/06 PHP
PHP按指定键值对二维数组进行排序的方法
2015/12/22 PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
2018/09/26 PHP
如何用javascript控制上传文件的大小
2006/10/26 Javascript
dojo 之基础篇(三)之向服务器发送数据
2007/03/24 Javascript
javascript 函数式编程
2007/08/16 Javascript
jQuery实现可拖动的浮动层完整代码
2013/05/27 Javascript
js实时获取系统当前时间实例代码
2013/06/28 Javascript
js与jquery回车提交的方法
2015/02/03 Javascript
详解JavaScript中的客户端消息框架设计原理
2015/06/24 Javascript
js下拉菜单生成器dropMenu使用方法详解
2017/08/01 Javascript
ES6新增的math,Number方法
2017/08/06 Javascript
微信小程序商品详情页的底部弹出框效果
2020/11/16 Javascript
解决angular双向绑定无效果,ng-model不能正常显示的问题
2018/10/02 Javascript
浅谈Fetch 数据交互方式
2018/12/20 Javascript
JavaScript实现简单计算器
2020/03/19 Javascript
vue+element-ui表格封装tag标签使用插槽
2020/06/18 Javascript
简单了解Django ORM常用字段类型及参数配置
2020/01/07 Python
python手机号前7位归属地爬虫代码实例
2020/03/31 Python
python如何获得list或numpy数组中最大元素对应的索引
2020/11/16 Python
简单介绍HTML5中audio标签的使用
2015/09/24 HTML / CSS
Timex手表官网:美国运动休闲手表品牌
2017/01/28 全球购物
eBay意大利购物网站:eBay.it
2019/09/04 全球购物
Invicta手表官方商店:百年制表历史的瑞士腕表品牌
2019/09/26 全球购物
static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
2015/02/22 面试题
法雷奥SQA(electric)面试问题
2016/01/23 面试题
MySQL面试题目集锦
2016/04/14 面试题
五水共治捐款倡议书
2014/05/14 职场文书
汽车运用工程专业求职信
2014/06/18 职场文书
班级标语大全
2014/06/21 职场文书
工程合作意向书范本
2015/05/09 职场文书
2016年国陪研修感言
2015/11/18 职场文书
使用CSS设置滚动条样式
2022/01/18 HTML / CSS
Python 图片添加美颜效果
2022/04/28 Python