当前位置: 首页 > 编程笔记 >

PHP 不同类型的序列化

杨昊
2023-03-14
本文向大家介绍PHP 不同类型的序列化,包括了PHP 不同类型的序列化的使用技巧和注意事项,需要的朋友参考一下

示例

生成值的可存储表示形式。

这对于存储或传递PHP值而不丢失其类型和结构很有用。

要再次将序列化的字符串转换为PHP值,请使用unserialize()

序列化字符串

$string = "Hello world";    
echo serialize($string);

// 输出: 
// s:11:"Hello world";

序列化双精度

$double = 1.5;    
echo serialize($double);

// 输出: 
// d:1.5;

序列化浮点数

浮点数被序列化为双打。

序列化整数

$integer = 65;    
echo serialize($integer);

// 输出: 
// 我:65;

序列化布尔值

$boolean = true;    
echo serialize($boolean);

// 输出: 
// b:1;

$boolean = false;    
echo serialize($boolean);

// 输出: 
// b:0;

序列化null

$null = null;    
echo serialize($null);

// 输出: 
// N;

序列化数组

$array = array(
    25,
    'String',
    'Array'=> ['Multi Dimension','Array'],
    'boolean'=> true,
    'Object'=>$obj, // 上面示例中的$obj
    null,
    3.445
); 


// 这将引发致命错误
// $array['function'] = function() { return "function"; };

echo serialize($array);

// 输出:
// a:7:{i:0;i:25;i:1;s:6:"String";s:5:"Array";a:2:{i:0;s:15:"Multi Dimension";i:1;s:5:"Array";}s:7:"boolean";b:1;s:6:"Object";O:3:"abc":1:{s:1:"i";i:1;}i:2;N;i:3;d:3.4449999999999998;}

序列化对象

您还可以序列化对象。

序列化对象时,PHP将尝试__sleep()在序列化之前调用成员函数。这是为了允许对象在序列化之前进行最后一分钟的清理等。同样,当对象是使用恢复unserialize()__wakeup()成员函数被调用。

class abc {
    var $i = 1;
    function foo() {
        return 'hello world';
    }
}

$object = new abc(); 
echo serialize($object);

// 输出:
// O:3:"abc":1:{s:1:"i";i:1;}

请注意,闭包不能序列化:

$function = function () { echo 'Hello World!'; };
$function(); // prints "hello!"

$serializedResult = serialize($function);  // 致命错误:消息“不允许序列化序列化”的未捕获异常“ Exception”
           

 类似资料:
  • 序列化和反序列化的方式不同于 我已经创建了两个序列化程序 和 我用Jackson查看了序列化/反序列化映射 ,但找不到解决方案。

  • 我试图反序列化2种不同类型的列表,包括它们的派生类 为了更好地解释它,我做了下面的例子 我有2个系统: API系统 与下列实体合作: 应用系统 使用以下DTO 使用此示例,API系统返回一个

  • 我想实现一个功能,其中请求映射到正确的对象。是否有一种方法(除了自定义反序列化器)可以将请求按类型/基数映射到适当的对象?任何见解都将不胜感激!

  • 问题内容: 我正在尝试使用Gson 反序列化a ,值的类型可以变化,值“ in_wanted”可以是a 或a 。 in_wanted为: in_wanted为: 每当“ in_wanted”的值为布尔值时,我都需要该对象,并且需要一个反序列化器以返回null。用Gson做到这一点的最佳方法是什么? 问题答案: 您可以使用自定义解串器来完成此操作。首先,我们应该创建可以表示您的JSON的数据模型。

  • 我有一个REST API,它返回JSON响应为: 有时它会返回: 我有一个这样的POJO: 那么,有没有办法(除了编写自己的自定义反序列化程序)在 Jackson2 中帮助我将 JSON 中的通道映射到字符串类型(当它是时)和类型(当它是 JSON 对象时)? 或者换句话说,Jackson中是否有一种方法可以通过变量的映射,而不仅仅是通过?

  • 问题内容: 我有一个Web服务的结果,该结果返回布尔值或单例映射,例如 布尔结果: 地图结果: 单独地,我可以轻松地映射这两个位置,但是我该如何做呢? 基本上我想将其映射到一个类: 所有所有多态示例都用于基于数据中的属性进行映射,但是在这种情况下,我没有该选项。 编辑 代码的更新部分: 问题答案: 不不不。您不必编写自定义解串器。只需先使用“无类型”映射: 给出“定级” 价值或“定级”价值(采用第