PHP Conference Japan 2024

igbinary_serialize

(PECL igbinary >= 1.1.1)

igbinary_serialize生成值的紧凑、可存储的二进制表示

描述

igbinary_serialize(混合 $value): 字符串|false

生成值的可存储表示。

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

要将序列化字符串再次转换为PHP值,可以使用igbinary_unserialize()

参数

value

要序列化的值。igbinary_serialize()处理所有类型,除了资源类型和一些对象(参见下面的说明)。即使包含自身引用的数组也可以由igbinary_serialize()处理。正在序列化的数组对象内部的循环引用也将被存储。任何其他引用都将丢失。

序列化对象时,igbinary将尝试在序列化之前调用成员函数__serialize()__sleep()。这是为了允许对象在序列化之前进行任何最后一刻的清理等。同样,当使用igbinary_unserialize()恢复对象时,将调用__unserialize()__wakeup()成员函数。

注意:

对象的私有成员在成员名前面加上类名;受保护的成员在成员名前面加上'*'。这些前缀值的两侧都有空字节。

返回值

返回一个字符串,其中包含value的字节流表示,可以存储在任何地方。

请注意,这是一个二进制字符串,可以包含任何字节值,需要按此方式存储和处理。例如,igbinary_serialize()的输出通常应存储在数据库中的BLOB字段中,而不是CHARTEXT字段中。

示例

示例 #1 igbinary_serialize() 示例

<?php
$ser
= igbinary_serialize(['test', 'test']);
echo
urlencode($ser), "\n";
var_export(igbinary_unserialize($ser));
?>

上面的例子将输出

%00%00%00%02%14%02%06%00%11%04test%06%01%0E%00
array (
  0 => 'test',
  1 => 'test',
)

注释

注意:

请注意,许多内置的PHP对象无法序列化。但是,具有此能力的对象要么实现Serializable接口,要么实现魔术__serialize()/__unserialize()__sleep()/__wakeup()方法。如果内部类不满足任何这些要求,则无法使用任何序列化器可靠地对其进行序列化。

上述规则存在一些历史例外,其中一些内部对象可以在不实现接口或公开方法的情况下进行序列化。

参见

添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top