面向对象 串行化对象 魔术方法

来源:互联网 发布:porter robinson知乎 编辑:程序博客网 时间:2024/06/06 02:39

什么时候使用串行化?在网络中传输对象的时候

向数据库中保存文件的时候

<?phpheader("Content-Type: text/html; charset=utf-8");$arr = array('name'=>'娜美','age'=>18,'sex'=>'女');/* 串行化 *可以串行化数组/对象 * 串行化对象时只是串行化了成员属性  *  * 反串行化 * 可以把串行化的结果进行反串行化操作 */$str = serialize($arr); /*串行化*/echo '<pre>';var_dump($str);$str2 = unserialize($str); /*反串行化*/echo '<pre>';var_dump($str2);?>
串行化高级应用
<?phpclass seri{public $name;public $age;public $sex;public function __construct($name,$age,$sex){$this -> name = $name;$this -> age = $age;$this ->sex = $sex;}public function __sleep(){return array('name','sex');}}$seri = new seri('娜美',20,'女');$str = serialize($seri);/* 在本目录创建data.text 并把字符串写入到文本内*/$handle = fopen('./data.txt', 'w+');fwrite($handle, $str);fclose($handle);?>

本地同级目录生成 data.txt 文件
内容
O:4:"seri":2:{s:4:"name";s:6:"娜美";s:3:"sex";s:3:"女";}
反串行高级应用
<?php
//class.demo.phpclass seri{public $name;public $age;public $sex;public function __construct($name,$age,$sex){$this -> name = $name;$this -> age = $age;$this ->sex = $sex;}/* * 魔术方法 * __sleep 在串行化对象时自动调用 */public function __sleep(){/* 返回一个数组,数组的值就是要串行化的成员属性名 */return array('name','sex');}/* * 魔术方法 * __wakeup 在反串行化对象被自动调用 */public function __wakeup(){/* 可以把发生改变的成员属性,进行重新赋值操作 */$this -> name = $this -> name."123";}}?>
<?phpheader("Content-Type: text/html; charset=utf-8");include('./class.demo.php');$str = file_get_contents('./data.txt');$d = unserialize($str);echo '<pre>';var_dump($d);echo $d->name;?>



 
原创粉丝点击