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请求,假如要对数 ...
随机推荐
- IOC功能以及相关的配置
功能: 控制反转,将对象的创建权反转给Spring可以解决程序耦合性高的问题,大概的意思就是将程序运行时所需要的资源.数据,全部让Spring供给,防止程序与程序之间联系过高,而出现耦合性高的问题. ...
- [Java][Spring]Spring事务不起作用 问题汇总
[Java][Spring]Spring事务不起作用 问题汇总 http://blog.csdn.net/szwangdf/article/details/41516239
- Error while trying to retrieve text for error ORA-12705
今天, 按照以前的学习笔记, 配置ProC 但是, 却发生了如题的错误. Google一下, 都是NLS_LANG环境变量设置有问题, 我核一下没有问题. 问题在哪? 原来是ORACLE_HOME环境 ...
- 如何编辑SDE数据库(转载)
转自原文 如何编辑SDE数据库(转载) 如何编辑SDE数据(转自ESRI中国社区) (2008-12-15 17:26:41) 很多刚入门的朋友对SDE数据并不太了解,接二连三的在社区里面发问,有时也 ...
- Qt on Android: http下载与Json解析
百度提供有查询 ip 归属地的开放接口,当你在搜索框中输入一个 ip 地址进行搜索,就会打开由 ip138 提供的百度框应用,你能够在框内直接输入 ip 地址查询.我查看了页面请求,提取出查询 ip ...
- Git恢复删除或修改的文件 ls-files
一.git ls-files -d 查看删除了的文件 1.查看当前状态可以看到删除了一个index.js: git status image.png 2.查看当前项目中删除了的文件 git ls-fi ...
- noip刷题记录 20170823
独木桥 怎么说呢 #include<iostream> #include<cstdio> #include<algorithm> using namespace s ...
- 【codeforces 791A】Bear and Big Brother
[题目链接]:http://codeforces.com/contest/791/problem/A [题意] 给你两个数字a和b; a每次乘3,b每次乘2 问你什么时候a第一次大于b [题解] 傻逼 ...
- 快速删除 jar 里面的 BuildConfig.class
快速删除 jar 里面的 BuildConfig.class 起因:多个 jar 包里面的 BuildConfig.class 文件导致编译冲突. 方法一:土方法 使用 jar 解包 jar xf x ...
- 单点登录原理与简单实现--good
一.单系统登录机制 1.http无状态协议 web应用采用browser/server架构,http作为通信协议.http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关 ...