php的对象串行化
Posted 孤舟残月浅笑嫣
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php的对象串行化相关的知识,希望对你有一定的参考价值。
php的对象串行化,就是把对象传化成二进制字符串格式,便于存储在文件、数据库中,或者在网络上传输对象数据,其中涉及的函数是:
1.serialize()函数:串行化对象,把对象转换成二进制字符串格式;
2.unserialize()函数:反串行化对象,把二进制字符串转换成对象;
3.魔术方法 __sleep():用来将对象中的部分成员串行化;
4.魔术方法 __wakeup():用来在二进制串重新组成一个对象时,为新对象中的成员属性重新初始化。
实例:
1.index.php文件:
<?php header("Content-Type:text/html;charset=utf-8"); class ClassAutoloader { public function __construct() { spl_autoload_register(array($this, \'loader\')); } private function loader($className) { include $className . \'.php\'; } } $autoloader = new ClassAutoloader(); echo new ClassShow;
2.person.php文件:
<?php class Person{ private $name; private $age; private $sex; function __construct($name = \'\', $sex =\'\', $age = \'\'){ $this->name = $name; $this->sex = $sex; $this->age = $age; } function say(){ return "我的名字:".$this->name.",姓别:".$this->sex.",年龄:".$this->age."<br>"; } /** * 魔术方法__sleep() 在对象串行化时用数组设置 * 需要串行化的对象属性,这里忽略了属性 $sex */ function __sleep(){ $arr = array("name", "age"); return $arr; } /** * 魔术方法 __wakeup() 用于在反串行化时对对象 * 属性重新赋初值 */ function __wakeup(){ $this->name = "李佳"; //$this->sex = "女"; $this->age = 26; } }
3.ClassShow.php文件:
<?php class ClassShow{ function __toString(){ $str = \'\'; $obj1 = new person("张三", "男", 23); $str .= "<strong style=\'color:#789\'>原始内容:</strong><br>" . $obj1->say(); $str .= "<br><br>"; /** * 串行化对象 * * 变量 $objStr 才是串行化需要得到的数据, * $objStr 中的数据可以用文件、数据库储存, * 可以用互联网进行传输, * 这里省略了这些步骤。 */ $objStr = serialize($obj1); $str .= "<strong style=\'color:#789\'>对象串行化内容:</strong><br>" . $objStr; $str .= "<br><br>"; //反串行化对象 $obj2 = unserialize($objStr); $str .= "<strong style=\'color:#789\'>反串行化内容:</strong><br>" . $obj2->say(); return $str; } }
注意:上面的实例包含了自动加载类 spl_autoload_register() 和 魔术方法 __toString() 的应用!
效果如下:
以上是关于php的对象串行化的主要内容,如果未能解决你的问题,请参考以下文章
redis学习中遇到对象的串行化(Serialization)问题
PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化)/约束类型/魔术方法小结