不同型別的序列化

生成值的可儲存表示。

這對於儲存或傳遞 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'