知识大全 php 中序列化和json使用介绍

Posted

篇首语:读书之法,在循序而渐进,熟读而精思。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 php 中序列化和json使用介绍相关的知识,希望对你有一定的参考价值。

  【序列化的概念】

  序列化是将对象状态转换为可保持或可传输的格式的过程 与序列化相对的是反序列化 它将流转换为对象 这两个过程结合起来 可以轻松地存储和传输数据

  将对象的状态信息转换为可以存储或传输的窗体的过程 在序列化期间 对象将其当前状态写入到临时或持久性存储区 以后 可以通过从存储区中读取或反序列化对象的状态 重新创建该对象

  通常 对象实例的所有字段都会被序列化 这意味着数据会被表示为实例的序列化数据 这样 能够解释该格式的代码有可能能够确定这些数据的值 而不依 赖于该成员的可访问性 类似地 反序列化从序列化的表示形式中提取数据 并直接设置对象状态 这也与可访问性规则无关 对于任何可能包含重要的安全性数据的对象 如果可能 应该使该对象不可序列化 如果它必须为可序列化的 请尝试生成特定字段来保存不可序列化的重要数据 如果无法实现这一点 则应注意该数据会被公开给任何拥有序列化权限的代码 并确保不让任何恶意代码获得该权限

  【JSON的概念】

  JSON JavaScript Object Notation 一种更轻 更友好的用于接口(AJAX REST等)数据交换的格式 JSON是结构化数据串行化的文本格式 作为XML的一种替代品 用于表示客户端与服务器间数据交换有效负载的格式 它是从ECMAScript语言标准 衍生而来的 JSON的设计目标是使它成为小的 轻便的 文本的 而且是JavaScript的一个子集

  【长度的比较】

  如下一段代码 显示了对数组和对象编码后生成的字符串及其长度

复制代码 代码如下: class Foo

  public $int = ;     public $bool = TRUE;     public $array = array(array( ) => test string );

  public function test($flag)         echo $flag test function for Foo <br /> ;    

  public static function output($str)         echo $str <br /> ;    

  public static function pare_serialize_and_json($data)         $serialize_str =  serialize($data);         self::output( 序列化后的值: $serialize_str "; length="             strlen($serialize_str));

  $json_str = json_encode($data);         self::output( JSON后的值: $json_str "; length=" strlen($json_str));    

  

  $test_data = array( w => phppan => => ); //序列化数组

  echo 数组 <br /> ; Foo::pare_serialize_and_json($test_data);

  $foo = new Foo(); echo 对象:<br /> ; Foo::pare_serialize_and_json($foo);

  输出

复制代码 代码如下: 数组 序列化后的值:a: :s: :"w";i: ;s: :"phppan";i: ;s: :"";i: ;; length= JSON后的值:"w": "phppan": "": ; length= 对象: 序列化后的值:O: :"Foo": :s: :"int";i: ;s: :"bool";b: ;s: :"array";a: :i: ;     a: :i: ;i: ;i: ;s: :"test";i: ;s: :"string";; length= JSON后的值:"int": "bool":true "array":" ":[ ] " ":"test" " ":"string"; length=

  很明显的长度区别 serialize在编码后大概是json的两倍

  原因

  •serialize后字符串包含了子串的长度 这可能是速度方面的优化 典型的空间换时间 但是它本身还是太重了 •serialize有更加详细的类型区分 而json只有四种类型 并且是以简单的符号表示

  【速度的比较】

  以代码说明问题 如下比较速度的代码

复制代码 代码如下: $max_index = ; ini_set("memory_limit" " M"); $array = array_fill( rand( ));

  echo serialize <br /> ; $start = xdebug_time_index(); for ($i = ;  $i < $max_index; $i++)     $str = serialize($array); $end = xdebug_time_index(); echo $end $start <br /> ;

  echo json <br /> ; $start = xdebug_time_index(); for ($i = ;  $i < $max_index; $i++)     $str = json_encode($array); $end = xdebug_time_index(); echo $end $start <br /> ; unset($array $str);

  输出

复制代码 代码如下: serialize json

  serialize的速度在大数据量的情况下比json差了快一个数量级

  从上面两点看 json不管是在速度还是在生成的字符串的大小上都比serialize要好 那为什么serialize还要存在呢? 原因在下面这个点 实现的功能

  【处理对象】

  如下代码

复制代码 代码如下: header("Content type:text/;charset=utf "); class Foo      public function test($flag)         echo $flag test function for Foo <br /> ;    

  $foo = new Foo();

  echo 反序列化测试 <br /> ; $foo >test( ); $serialize_str = serialize($foo); $obj = unserialize($serialize_str); $obj >test( );

  $foo >test( ); $json_str = json_encode($foo); $obj = json_decode($json_str); $obj >test( ); die();

  输出

复制代码 代码如下: 反序列化测试 test function for Foo test function for Foo test function for Foo

  ( ! ) Fatal error: Call to undefined method stdClass::test()

  json无法处理对象方法等数据

  【使用范围】

cha138/Article/program/PHP/201311/20931

相关参考

知识大全 asp.net JSON序列化与反序列化使用

asp.netJSON序列化与反序列化使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  对JS

知识大全 在PHP使用json

在PHP使用json  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Json做为一种轻量级的数据

知识大全 使用PHP接收POST数据,解析json数据

使用PHP接收POST数据,解析json数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!本篇文章

知识大全 解析PHP 使用curl提交json格式数据

解析PHP使用curl提交json格式数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!本篇文章是

知识大全 php执行数据库查询返回json格式数据

  <?php  //需要执行的SQL语句//单条$sql="selectidnamefromtbl_userwhereid=";//多条数据//$sql="selectidnamefromtb

知识大全 PHP JSON中文乱码解决方法大全

PHPJSON中文乱码解决方法大全  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  我们知道在使用

知识大全 js实现json数据行到列的转换的实例代码

为了实现这样的数据显示出来三个序列分别为郑州新乡安阳的电量就需要自己实现对这样数据的转换转换成如下的形式   月份郑州电量新乡电量安阳电量这样Ext的图表就能把它显示成三个序列了我写了如下的

知识大全 js实现json数据行到列的转换

  为了实现这样的数据显示出来三个序列分别为郑州新乡安阳的电量就需要自己实现对这样数据的转换转换成如下的形式  月份郑州电量新乡电量安阳电量            这样Ext的图表就能把它显示成三个序

知识大全 java 解析json格式数据

  有时候可能会用到json格式进行数据的传输那么怎么把接收到的数据解析出来呢?下面介绍两种解析json数据的方法      通过谷歌的Gs

知识大全 c#实体类序列化方法

  提到为了传递数据需要把作为载体的实体类序列化好好的找了一些序列化方面的介绍感觉下面的这个介绍比较容易介绍!  什么是序列化  序列化是将对象状态转换为可保持或传输的格式的过程在序列化过程中对象的公