序列化是將變數轉換為可保存或傳輸的字串的過程;反序列化就是在適當的時候把這個字串再轉換成原來的變數使用。這兩個過程結合起來,可以輕鬆地儲存和傳輸數據,使程式更具維護性。
PHP中的序列化和反序列化分別透過函數serialize()和unserialize()即可實現。
string serialize ( mixed value )
serialize() 傳回字串,此字串包含了表示 value 的位元組流,可以儲存於任何地方。 (建議學習:PHP程式設計從入門到精通)
這有利於儲存或傳遞 PHP 的值,同時不遺失其類型和結構。
想要將已序列化的字串變回 PHP 的值,可使用 unserialize()。 serialize() 可處理除了 resource 之外的任何類型。甚至可以 serialize() 那些包含了指向其自身引用的陣列。你正 serialize() 的陣列/物件中的引用也將被儲存。
當序列化物件時,PHP 會試圖在序列動作之前呼叫該物件的成員函數 __sleep()。這樣就允許物件在被序列化之前做任何清除操作。類似的,當使用 unserialize() 恢復物件時, 將呼叫 __wakeup() 成員函數。
附註: 在 PHP 3 中,物件屬性將會被序列化,但是方法則會遺失。 PHP 4 打破了此限制,可以同時儲存屬性和方法。請參閱類別與物件中的序列化物件部分以取得更多資訊。
serialize() 範例
<?php // $session_data 是包含了当前用户 session 信息的多维数组。 // 我们使用 serialize() 在请求结束之前将其存储到数据库中。 $conn = odbc_connect ("webdb", "php", "chicken"); $stmt = odbc_prepare ($conn, "UPDATE sessions SET data = ? WHERE id = ?"); $sqldata = array (serialize($session_data), $PHP_AUTH_USER); if (!odbc_execute ($stmt, &$sqldata)) { $stmt = odbc_prepare($conn, "INSERT INTO sessions (id, data) VALUES(?, ?)"); if (!odbc_execute($stmt, &$sqldata)) { /* 出错 */ } } ?>
以上是php序列化是什麼意思的詳細內容。更多資訊請關注PHP中文網其他相關文章!