(PECL igbinary >= 1.1.1)
igbinary_serialize — 生成值的紧凑可存储二进制表示
value
要序列化的值。 igbinary_serialize() 处理所有类型,除了 资源 类型和一些 对象 (见下文注释)。 即使是包含自身引用的 数组 也可以由 igbinary_serialize() 处理。 被序列化 数组 或 对象 内部的循环引用也将被存储。 任何其他引用将丢失。
序列化对象时,igbinary 将尝试在序列化之前调用成员函数 __serialize() 或 __sleep()。 这是为了允许对象在序列化之前进行任何最后一刻的清理等操作。 同样,当对象使用 igbinary_unserialize() 恢复时,将调用 __unserialize() 或 __wakeup() 成员函数。
注意:
对象 的私有成员在成员名称前附加类名;受保护的成员在成员名称前附加
'*'
。 这些附加的值在两侧都有空字节。
返回一个字符串,包含 value
的字节流表示,可以存储在任何地方。
请注意,这是一个二进制字符串,可以包含任何字节值,需要以这种方式存储和处理。 例如,igbinary_serialize() 输出通常应该存储在数据库中的 BLOB
字段中,而不是 CHAR
或 TEXT
字段中。
示例 #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() 方法。 如果内部类不满足任何这些要求,则无法使用任何序列化器可靠地对其进行序列化。
在上述规则中,有一些历史上的例外,其中一些内部对象可以在没有实现接口或公开方法的情况下进行序列化。