php 数组序列化-了解序列化和 json 序列化

2023-09-05 0 7,776 百度已收录

PHP的serialize将变量序列化并返回具有变量类型和结构的字符串表达式,而JSON是一种更轻量且更友好的socket(AJAX、REST等)数据交换格式。 它们都表示字符串形式的数据结构。

1。目的

Serialize主要用于php的序列php 数组序列化,存储在文件或数据库中

json_encode序列化主要用于与其他语言交互。 对于传输来说,json有很多优点。

2内容

通过serialize序列化后的字符串包含额外的内容,即值的类型和粗细的编码

json_encode 仅包含键值

Serialize后的内容应小于json_encode后内容的宽度

3对象序列化

解码json_decode时,请注意,如果是序列化的数值字段,json_decode可以恢复到原来的字段php 数组序列化,但如果序列化的是关联链表(或对象),则json_decode很难判断是否是关联的字段或对象。 ,所以 json_decode 会恢复默认解析为 stdclass 的对象。 如果添加第二个参数true,则会解析为关联字段

4 对象模式

json_encode无法序列化对象的成员方法

Serialize序列化后,unserialize反序列化数据,可以再次调用成员方法,而json_decode不起作用,会报错

5__sleep 和 __wakeUp 魔术

当对象被序列化时,PHP 将调用 __sleep 方法(如果存在,但执行操作,例如对变量参数进行操作)。 反序列化对象后,PHP 将调用 __wakeup 方法。 这两个方法都不接受参数。 __sleep方法必须返回一个链表,其中包括需要序列化的属性。 PHP 会丢弃其他属性的值。 如果没有__sleep方法,PHP将保存所有属性。

在程序执行之前,serialize()函数会首先检测是否有魔术__sleep。 如果存在,会先调用__sleep()方法,然后进行序列化(serialization)操作。 该函数可用于清除对象并返回一个包含对象中所有变量名称的字段(必须返回。相反,unserialize() 会检测是否存在 __wakeup 技巧。如果存在,则 __wakeup 方法将首先被调用,比如可以用来重新加入数据库。

6.演示

类Foo{

私人$名称;

公共函数测试(){

php 数组序列化-了解序列化和 json 序列化

返回“测试”;

$foo=newFoo();

$cser=序列化($foo);

$uncser=反序列化($cser);

$json=json_encode($foo);

$unjson=json_decode($json);

回声 $uncser->test();

回声 $unjson->test();

输出:

测试

PHPFatalerror:Calltound 在 /tmp/php/serialize.phponline33 中定义了方法 stdClass::test()

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 php php 数组序列化-了解序列化和 json 序列化 https://www.wkzy.net/game/194942.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务