PHP中的序列化
接口
Serializable {
abstract public string serialize (void);
abstruact public void unserialize (string $serialized);
}
序列化简述:
使用serialize()保存对象中的所有变量,当对象被摧毁的时候,可以使用unserialize()重造对象。事实上,我们不需要保存对象中的方法,方法并不含有对象的属性。
使用serialize和unserialize之前,必须事先定义要序列化的对象所属的类。
serialize()会返回一个包含对象变量及其值的字符串。我们可以把该字符串保存到文件中,以便日后使用。
<?php
//classa.inc:
class A {
public $one = 1; public function show_one() {
echo $this->one;
}
} //page1.php
include ("classa.inc"); $a = new A;
$s = serialize($a);
file_put_contents('store', $s); //page2.php:
include ("classa.inc");
$s = file_get_contents('store');
$a = unserialize($s); $a->show_one();
再看看__sleep()和__wakeup()两个magic函数。
如果你的类中包含__sleep()函数,serialize()序列化之前会先调用__sleep()函数。__sleep()函数应该返回一个包含所有应当序列化的变量名的数组。如果__sleep()什么也不返回,序列化时会发出E_NOTICE错误。注意:私有变量无法被序列化,否则发出E_NOTIC错误。(或者可以自行实现Serializable接口)
与之相反,unserialize()会检查__wakeup()函数,如果有这个函数,则调用他。__wakeup()函数被用来重新构造object拥有的任何资源。可以用来重新建立数据库连接。
<?php
class Connection
{
protected $link;
private $dsn, $username, $password; public function __construct ($dsn, $username, $password)
{
$this->dsn = $dsn;
$this->username = $username;
$this->password = $password;
$this->connect();
} private function connect()
{
$this->link = new PDO ($this->dsn, $this->username, $this->password);
} public function __sleep()
{
//返回需要序列化的变量名
return array('dsn', 'username', 'password');
} public function __wakeup()
{
$this->connect();
}
}
?>
PHP中的序列化的更多相关文章
- .NET中XML序列化的总结
[题外话] 以前虽然常用.NET中的序列化,但是常用的BinaryFormatter,也就是二进制文件的序列化,却鲜用XML的序列化.对于XML序列化,.NET中同样提供了一个非常方便的工具XmlSe ...
- C#中JSON序列化和反序列化
有一段时间没有到博客园写技术博客了,不过每天逛逛博客园中大牛的博客还是有的,学无止境…… 最近在写些调用他人接口的程序,用到了大量的JSON.XML序列化和反序列化,今天就来总结下json的序列化和反 ...
- Net中JSON序列化和反序列化处理(日期时间特殊处理)
0 缘由 笔者最近在web api端使用Json.Net进行序列化处理,而在调用端使用DataContractSerializer进行反序列化,遇到日期时间处理反序列化不成功[备注:笔者使用Net ...
- .net中对象序列化技术浅谈
.net中对象序列化技术浅谈 2009-03-11 阅读2756评论2 序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储 ...
- JavaScriptSerializer中日期序列化问题解决方案
JavaScriptSerializer中日期序列化问题解决方案 直接进入主题: class Student { public int age { get; set; } public DateTim ...
- 1 weekend110的复习 + hadoop中的序列化机制 + 流量求和mr程序开发
以上是,weekend110的yarn的job提交流程源码分析的复习总结 下面呢,来讲weekend110的hadoop中的序列化机制 1363157985066 13726230503 ...
- spring mvc3中JACKSON序列化日期格式的问题 - 墙头草的Java - BlogJava
body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...
- AFN中请求序列化的设置
最近遇到一个需求:要求从客户端传到服务器的参数是json字符串,于是我本能的用pod装了afn然后进行了request和response Serialization的相关设置 AFHTTPSessio ...
- 在Java中进行序列化和反序列化
对象序列化的目标是将对象保存在磁盘中,或者允许在网络中直接传输对象. 对象序列化允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久保存在磁盘上或者通过网络将这种二进制流传输 ...
- DRF中的序列化器
DRF中的序列化器详细应用 视图的功能:说白了就是接收前端请求,进行数据处理 (这里的处理包括:如果前端是GET请求,则构造查询集,将结果返回,这个过程为序列化:如果前端是POST请求,假如要对数 ...
随机推荐
- 前端js实现打印(导出)excel表格
产品原型: 图片.png 功能需求:点击导出考勤表格按钮,会自动下载成Excel格式 图片.png 图片.png jsp页面代码: <div class="tools"> ...
- oracle listener.ora的host不能使localhost,而应该是该机器名,否则不能用ip地址进行连接
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/lis ...
- android studio怎么添加.so文件?android studio加载so文件的方法
android studio 中 添加.so 文件,Android Studio中添加.jar文件和.so文件无疑是一件很重要也是很头疼的问题! 1.在src/main中添加 jniLibs文件夹 , ...
- Tricks(四十九)—— 按 batch 访问越界的解决办法
使用 min 函数指定访问的最终位置,本质上是增加一个条件判断: done = false; batch_size = 10000; idx = 1; while ~done idx_end = mi ...
- php汉字字符串长度和截取
mb_strlen("你好123",'utf-8');//返回5 strlen("你好");//返回几我也不知道,肯定不是2,但你想要2就用上面的 substr ...
- Gibbs 采样定理的若干证明
坐标平面上的三点,A(x1,y1),B(x1,y2),C(x2,y1),假设有概率分布 p(x,y)(P(X=x,Y=y) 联合概率),则根据联合概率与条件概率的关系,则有如下两个等式: {p(x1, ...
- 【poj3468】A Simple Problem with Integers
Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 97008 Accepted: 30285 Case Time Limi ...
- Python 编程规范 —— TODO 注释(结合 PyCharm)
编程是代码和注释的统一: TODO 自然表示需要做而未做的一些待完成的事项,有助于事后的检索,以及对整体项目做进一步的修改迭代. # TODO(kl@gmail.com): Use a "* ...
- hexo改造
一直在思考网站分类的问题. 用hexo默认的分类,并不利于用户直观的感受到网站的内容意图,尤其是hexo首页进入后是最近发表的文章列表.然后考虑开启多个hexo服务,每个hexo服务是一个分类内容,如 ...
- android:layout_gravity和android:gravity属性的差别
gravity的中文意思就是"重心",就是表示view横向和纵向的停靠位置 android:gravity:是对view控件本身来说的,是用来设置view本身的文本应该显示在vie ...