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”