php面向对象第是十二篇 对象串行化(序列化)__sleep()和__wakeup()

2020-10-28 15:06:45 浏览数 (1)

对象串行化: 在什么情况下需要 对象串行化,? 第一种情况就是把一个对象 在网络中传输的时候要将对象串行化,第二种情况就是把对象写入文 件或是数据库的时候用到串行化 对象串行化(序列化)都是为了方便传输把。 举个例子把:像是: ,就像我们现在想把一辆汽车通过 轮船运到美国去,因为汽车的体积比较大,我们可以把汽车拆开成小 的部件,然后我们把这些部件通过轮般运到美国去,到了美国再把这 些部件组装回汽车。 串行化有两个过程,一个是串行化,就是把对象转化为二进制的 字符串,我们使用 serialize()函数来串行化一个对象,另一个是反串行 化,就是把对象转化的二进制字符串再转化为对象, 我们使用 unserialize()函数来反串行化一个对象。 解释:O代表

代码语言:javascript复制
<?php
class people
{
	var $name;
	var $sex;
	var $age;
	function __construct($name="",$sex="",$age="")
	{
		$this->name=$name;
		$this->sex=$sex;
		$this->age=$age;
	}
	function say()
	{
		echo "反串行化 名字:".$this->name.",性别:".$this->sex.",年龄:".$this->age;//二进制变成对象
	}
	function __sleep()
	{
		$arr=array("name","age");//这样做是删除掉sex变量
		return($arr);
	}
	function __wakeup()
	{
		$this->age=40;//反串行化的时候就修改age的值为40,因为sex性别已经删除掉了,所以已经没有了哈
	}
}
$p1=new people("陈业贵","男",20);
$p1_string=serialize($p1);//串行化,这个是转换成二进制。__sleep的时候就转换成二进制(过程中)
echo "串行化:".$p1_string;
echo "<br />";
$p2=unserialize($p1_string);//反串行化,调用__wakeup在转换成对象(过程中)
$p2->say();
?>

0 人点赞