《PHP教程:总结对比php中的多种序列化》要点:
本文介绍了PHP教程:总结对比php中的多种序列化,希望对您有用。如果有疑问,可以联系我们。
前言PHP实例
序列化是将对象状态转换为可保持或可传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储和传输数据.PHP实例
将对象的状态信息转换为可以存储或传输的窗体的过程. 在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象.PHP实例
通常,对象实例的所有字段都会被序列化,这意味着数据会被表示为实例的序列化数据.这样,能 够解释该格式的代码有可能能够确定这些数据的值,而不依赖于该成员的可访问性.类似地,反序列化从序列化的表示形式中提取数据,并直接设置对象状态,这也 与可访问性规则无关. 对于任何可能包含重要的安全性数据的对象,如果可能,应该使该对象不可序列化.如果它必须为可序列化的,请尝试生成特定字段来保存不可序列化的重要数据. 如果无法实现这一点,则应注意该数据会被公开给任何拥有序列化权限的代码,并确保不让任何恶意代码获得该权限.PHP实例
serialize和unserialize函数
PHP实例
这两个是序列化和反序列化PHP中数据的常用函数.有利于存储或传递 PHP 的值,同时不丢失其类型和结构.PHP实例
<?php $a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut'); //序列化数组 $s = serialize($a); echo $s; //输出结果:a:3:{s:1:"a";s:5:"Apple";s:1:"b";s:6:"banana";s:1:"c";s:7:"Coconut";} echo '<br /><br />'; //反序列化 $o = unserialize($s); print_r($o); //输出结果 Array ( [a] => Apple [b] => banana [c] => Coconut ) ?>
当数组值包含如双引号、单引号或冒号等字符时,它们被反序列化后,可能会出现问题.为了克服这个问题,一个巧妙的技巧是使用base64_encode
和base64_decode
.PHP实例
$obj = array(); //序列化 $s = base64_encode(serialize($obj)); //反序列化 $original = unserialize(base64_decode($s)); 但是base64编码将增加字符串的长度.为了克服这个问题,可以和gzcompress一起使用. //定义一个用来序列化对象的函数 function my_serialize( $obj ) { return base64_encode(gzcompress(serialize($obj))); } //反序列化 function my_unserialize($txt) { return unserialize(gzuncompress(base64_decode($txt))); }
json_encode 和 json_decode
PHP实例
使用JSON格式序列化和反序列化是一个不错的选择:PHP实例
使用json_encode
和json_decode
格式输出要serialize
和unserialize
格式快得多.PHP实例
(1) JSON
格式是可读的.PHP实例
(2) JSON
格式比serialize
返回数据结果小.PHP实例
(3) JSON
格式是开放的、可移植的.其他语言也可以使用它.PHP实例
$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut'); //序列化数组 $s = json_encode($a); echo $s; //输出结果:{"a":"Apple","b":"banana","c":"Coconut"} echo '<br /><br />'; //反序列化 $o = json_decode($s);
在上面的例子中,json_encode
输出长度比上个例子中serialize
输出长度显然要短.需要注意的是json_encode
不能序列化对象.PHP实例
总结PHP实例
以上就是这篇文章的全部内容,希望大家能够喜欢并且给大家带来帮助.如果有问题可以留言讨论.PHP实例
转载请注明本页网址:
http://www.vephp.com/jiaocheng/3967.html