(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()方法。如果内部类不满足任何这些要求,则无法使用任何序列化器可靠地对其进行序列化。
上述规则存在一些历史例外,其中一些内部对象可以在不实现接口或公开方法的情况下进行序列化。