< p >PHP語言的序列化是一項非常重要的功能,他可以幫助我們將PHP對象轉化為一些字節串或者是返回字符串。尤其在網絡傳輸時,將對象序列化再傳輸再反序列化,便于在網絡傳輸時快速傳遞數據,并保存到磁盤上。 p >< p >由于PHP可以與許多類型相關的數據存儲(如XML,JSON,YAML等)進行交互,但序列化和反序列化還是最快的,不需要類型聲明,解析代碼,或找到適當的類文件。 p >< p >PHP提供了一個名為marshal的函數,可以幫助我們完成序列化和反序列化。 p >
$member = array('liaoli', 'password123'); $str = 'liaoli' . chr(0) . 'password123' . chr(0); $val = msgpack_unpack($str); var_dump($val);< p >我們可以使用marshal的語法將PHP對象轉換為字符串。例如,我們可以將數組轉換為string,則它將表示為以下形式: p >
$member = array('liaoli', 'password123'); $str = marshal.pack($member); echo $str . "\n";< p >我們還可以使用marshal來解碼它們。例如,我們可以將序列化后的字符串轉換為PHP對象,如下所示:
$packed_string = "x50x0pxFE\x00\x00\x00\x03keyx01x00x00x00\x06valuedone."; $unpacked = msgpack_unpack($packed_string); var_dump($unpacked);< p >此方法返回以下結果:
$packed_string = "x50x0pxFE\x00\x00\x00\x03keyx01x00x00x00\x06valuedone."; [ 'key' => 'value', ]< p >我們還可以將對象轉換為二進制并從它們中讀取數據。請查看此與PyObjectMarshal.cpp相關的文檔,并從中了解有關該過程的更多信息。 p >< p >此外,當前的PHP規范及PHP許多現代框架,默認情況下使用PHP序列化。他們可以跨越多個代碼庫中傳遞對象,因為序列化函數通過某個字符串數據表示法提供了唯一標識符。 p >
class MyClass { public $foo; public function __construct($foo) { $this->foo = $foo; } } $obj = new MyClass('hello'); var_dump($obj); $serialized = serialize($obj); var_dump($serialized); $restored = unserialize($serialized); var_dump($restored);< p >上述代碼將生成以下結果:
class MyClass#1 (1) { public $foo => string(5) "hello" } string(47) "O:7:"MyClass":1:{s:3:"foo";s:5:"hello";}" object(MyClass)#2 (1) { ["foo"]=>string(5) "hello" }< p >總之,PHP的序列化功能使我們更容易在PHP代碼中操作對象。Marshal提供了一些額外的功能,可以幫助我們快速進行序列化和反序列化。但默認的PHP序列化被廣泛使用。使用哪種序列化形式應由您的特定要求和目標環境決定。
下一篇masql與php