二维码
易分讯

扫一扫关注

您所在的位置:易分讯>客户需求>生活智库>php序列化数据,php的序列化操作生成的哪种格式
收藏 0
扫一扫
举报

php序列化数据,php的序列化操作生成的哪种格式

采购类型:
  • 价格要求: 电议
  • 采购数量:7910
  • 包装要求:袋装
  • 采购情况:长期有效
  • 所在地:北京
  • 更新时间:    发布时间:1天前
  • 信息有效期: 长期有效
采购信息描述
  • 所在地:北京
  • 有效期至:长期有效

大家好,今天给各位分享php序列化数据的一些知识,其中也会对php的序列化操作生成的哪种格式进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!

在PHP编程中,序列化数据是一项非常重要的操作。它能够将复杂的数据结构转换为字符串形式,便于数据存储、传输和解析。本文将深入解析PHP序列化数据的相关知识,并分享一些实用的应用技巧。

一、什么是序列化?

序列化(Serialization)是将数据结构或对象状态转换成可以存储或传输的格式的过程。在PHP中,序列化通常用于将对象或数组转换成JSON或XML格式的字符串,以便在网络上传输或存储。

二、PHP序列化常用方法

PHP提供了多种序列化方法,以下是几种常用的方法:

1. serialize():将一个对象或数组序列化为JSON格式的字符串。

2. unserialize():将JSON格式的字符串反序列化为对象或数组。

3. json_encode():将一个PHP值(通常是数组或对象)转换成JSON字符串。

4. json_decode():将JSON字符串转换成PHP值(通常是对象或数组)。

下面是一个简单的示例:

```php

$array = array('name' => '张三', 'age' => 20);

$json = json_encode($array);

echo $json; // 输出: {"

PHP序列化数据存储在数据库中使用json还是serialize好

1)空间的比较

serialize在编码后大概是json的1.5倍。

原因:

serialize后字符串包含了子串的长度,这可能是速度方面的优化,但是测试结果不尽人意。

serialize有更加详细的类型区分,而json只有四种类型,并且是以简单的符号表示。

2)速度的比较

在较小数据的情况下, serialize比json快数量级。

在大数据量的情况下,json比serialize稍微差一点

3)处理对象

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

4)使用范围

在前后端交互一般都使用JSON,目前JSON只支持UTF-8编码的数据。

序列化使用serialize,特别是对象的存储。这是其存在的意义。

与对象无关的数据存储可以使用json,如包含大量数字的数组等。

这篇博客概括满全面:

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的两倍

  原因

  &8226;serialize后字符串包含了子串的长度这可能是速度方面的优化典型的空间换时间但是它本身还是太重了&8226;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无法处理对象方法等数据

  【使用范围】

lishixinzhi/Article/program/PHP/201311/20931

到底什么是PHP序列化

在PHP中,序列化用于存储或传递 PHP的值的过程中,同时不丢失其类型和结构。本文讲述PHP序列化的四种方案,感兴趣的可以了解一下

序列化是将变量转换为可保存或传输的字符串的过程;反序列化就是在适当的时候把这个字符串再转化成原来的变量使用。这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性。

1、什么是PHP序列化——serialize和unserialize函数

这两个是序列化和反序列化PHP中数据的常用函数。

$a= array(&39;a&39;=>&39;Apple&39;,&39;b&39;=>&39;banana&39;,&39;c&39;=>&39;Coconut&39;);

//序列化数组$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&39;&39;

;

//反序列化$o= unserialize($s);

print_r($o);

当数组值包含如双引号、单引号或冒号等字符时,它们被反序列化后,可能会出现问题。为了克服这个问题,一个巧妙的技巧是使用base64_encode和base64_decode。

$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)));}

2、什么是PHP序列化——json_encode和 json_decode

使用JSON格式序列化和反序列化是一个不错的选择:

使用json_encode和json_decode格式输出要serialize和unserialize格式快得多。

JSON格式是可读的。

JSON格式比serialize返回数据结果小。

JSON格式是开放的、可移植的。其他语言也可以使用它。

$a= array(&39;a&39;=>&39;Apple&39;,&39;b&39;=>&39;banana&39;,&39;c&39;=>&39;Coconut&39;);

//序列化数组$s= json_encode($a);echo$s;//输出结果:{"a":"Apple","b":"banana","c":"Coconut"}

echo&39;

;

//反序列化$o= json_decode($s);

在上面的例子中,json_encode输出长度比上个例子中serialize输出长度显然要短。[page]

3、什么是PHP序列化——var_export和 eval

var_export函数把变量作为一个字符串输出;eval把字符串当成PHP代码来执行,反序列化得到最初变量的内容。

$a= array(&39;a&39;=>&39;Apple&39;,&39;b&39;=>&39;banana&39;,&39;c&39;=>&39;Coconut&39;);

//序列化数组$s= var_export($a, true);echo$s;//输出结果: array(&39;a&39;=>&39;Apple&39;,&39;b&39;=>&39;banana&39;,&39;c&39;=>&39;Coconut&39;,)

echo&39;

&39;;

//反序列化eval(&39;$my_var=&39;.$s.&39;;&39;);

print_r($my_var);

4、什么是PHP序列化——wddx_serialize_value和 wddx deserialize

wddx_serialize_value函数可以序列化数组变量,并以XML字符串形式输出。

$a= array(&39;a&39;=>&39;Apple&39;,&39;b&39;=>&39;banana&39;,&39;c&39;=>&39;Coconut&39;);

//序列化数组$s= wddx_serialize_value($a);echo$s;

//输出结果(查看输出字符串的源码): ApplebananaCoconut

echo&39;

&39;;

//反序列化$o= wddx_deserialize($s);

print_r($o);//输出结果:Array( [a]=> Apple [b]=> banana 1=> Coconut)

可以看出,XML标签字符较多,导致这种格式的序列化还是占了很多空间。

结论

上述所有的函数在序列化数组变量时都能正常执行,但运用到对象就不同了。例如json_encode序列化对象就会失败。反序列化对象时,unserialize和eval将有不同的效果。

本篇《什么是PHP序列化?这个知识点才是你应该了解到的用》到这里就已经结束了,小编一直认为,某一个编程软件受欢迎是有一定原因的,首先吸引人的一定是其功能,环球网校的小编祝您PHP学习之路顺利,如果你还想知道更多php知识,也可以点击本站的其他文章进行学习。

文章到这里就结束啦,如果本次分享的php序列化数据和php的序列化操作生成的哪种格式问题对您有所帮助,还望关注下本站哦!

举报 0 收藏 0
相关采购信息
相关采购类目
热门采购搜索
生活智库

我有生活智库相关产品供应,立即发布供应产品,让采购生活智库的公司主动与您联系!

立即发布供应产品

免责声明

本网页所展示的有关【php序列化数据,php的序列化操作生成的哪种格式_生活智库_安佳家电维修中心】的信息/图片/参数等由易分讯的会员【安佳家电维修中心】提供,由易分讯会员【安佳家电维修中心】自行对信息/图片/参数等的真实性、准确性和合法性负责,本平台(本网站)仅提供展示服务,请谨慎交易,因交易而产生的法律关系及法律纠纷由您自行协商解决,本平台(本网站)对此不承担任何责任。您在本网页可以浏览【php序列化数据,php的序列化操作生成的哪种格式_生活智库_安佳家电维修中心】有关的信息/图片/价格等及提供【php序列化数据,php的序列化操作生成的哪种格式_生活智库_安佳家电维修中心】的商家公司简介、联系方式等信息。

联系方式

在您的合法权益受到侵害时,欢迎您向邮箱发送邮件,或者进入《网站意见反馈》了解投诉处理流程,我们将竭诚为您服务,感谢您对易分讯的关注与支持!

赣ICP备2024039802号-13

免责声明:本网站(以下简称“本站”)所提供的内容均来自于互联网收集或转载,目的在于传递更多信息,仅供用户参考,不代表本站立场,本站不对该内容的准确性、真实性或合法性承担任何责任。本站致力于保护知识产权,并尊重所有合法权益。由于互联网的开放性,本站无法对收集的所有内容进行证实,故请自行决定是否采用,如需采用风险自负。如果您认为本站的某些内容侵犯了您的合法权益,请通过电子邮件与我们联系投诉相关问题:[482477792@qq.com]。请注意您应确保所提供的侵权投诉信息真实、准确(发送邮件时请附带相关的知识产权材料或其他证明文件等以供核实,否则我们无法辨别。)收到来信后我们将尽快审核相关内容,并在必要时采取适当措施(包括但不限于删除侵权内容)。文章内容均来源于互联网整理和汇编,不代表本站的观点,本站不对文章内容给予任何保证、暗示或承诺,严禁浏览者根据内容形成判断与决定,浏览者所做的任何判断与决定都与本站无关,请谨慎作出决定,如发现本站有涉嫌抄袭侵权/违法违规的内容, 请及时联系我们的邮箱,一经查实,本站将立刻处理,谢谢配合!