不同类型的序列化
生成值的可存储表示。
这对于存储或传递 PHP 值非常有用,而不会丢失其类型和结构。
要使序列化字符串再次成为 PHP 值,请使用 unserialize()
。
序列化字符串
$string = "Hello world";
echo serialize($string);
// Output:
// s:11:"Hello world";
序列化一个双
$double = 1.5;
echo serialize($double);
// Output:
// d:1.5;
序列化一个浮点数
Float 被序列化为双精度数。
序列化整数
$integer = 65;
echo serialize($integer);
// Output:
// i:65;
序列化布尔值
$boolean = true;
echo serialize($boolean);
// Output:
// b:1;
$boolean = false;
echo serialize($boolean);
// Output:
// b:0;
序列化 null
$null = null;
echo serialize($null);
// Output:
// N;
序列化数组
$array = array(
25,
'String',
'Array'=> ['Multi Dimension','Array'],
'boolean'=> true,
'Object'=>$obj, // $obj from above Example
null,
3.445
);
// This will throw Fatal Error
// $array['function'] = function() { return "function"; };
echo serialize($array);
// Output:
// 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()
。这是为了允许对象在序列化之前进行最后一分钟的清理等。同样,当对象是使用还原反序列化() 的 __wakeup()
成员函数被调用。
class abc {
var $i = 1;
function foo() {
return 'hello world';
}
}
$object = new abc();
echo serialize($object);
// Output:
// O:3:"abc":1:{s:1:"i";i:1;}
请注意,无法序列化闭包:
$function = function () { echo 'Hello World!'; };
$function(); // prints "hello!"
$serializedResult = serialize($function); // Fatal error: Uncaught exception 'Exception' with message 'Serialization of 'Closure' is not allowed'