程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP的serialize()串行化函數

PHP的serialize()串行化函數

編輯:關於PHP編程

serialize()和unserialize()在php手冊上的解釋是:

serialize — Generates a storable representation of a value,產生一個可存儲的值的表示。

unserialize — Creates a PHP value from a stored representation,從已存儲的表示中創建 PHP 的值。

serialize() 返回字符串,此字符串包含了表示 value 的字節流,可以存儲於任何地方。這有利於存儲或傳遞 PHP 的值,同時不丟失其類型和結構。

想要將已序列化的字符串變回 PHP 的值,可使用 unserialize() 。 serialize() 可處理除了 resource 之外的任何類型。甚至可以 serialize() 那些包含了指向其自身引用的數組。你正 serialize() 的數組/對象中的引用也將被存儲。

當序列化對象時,PHP 將試圖在序列動作之前調用該對象的成員函數 __sleep() 。這樣就允許對象在被序列化之前做任何清除操作。類似的,當使用 unserialize() 恢復對象時, 將調用 __wakeup() 成員函數。

下面我們試一下這個函數的使用方法:

<?php
//聲明一個類
class dog {
    var $name;
    var $age;
    var $owner;
    function dog($in_name="unnamed", $in_age="0", $in_owner="unknown") {
        $this->name = $in_name;
        $this->age = $in_age;
        $this->owner = $in_owner;
    }
    function getage() {
        return ($this->age * 365);
    }
    
    function getowner() {
        return ($this->owner);
    }
    
    function getname() {
        return ($this->name);
    }
}
//實例化這個類
$ourfirstdog = new dog("Rover",12,"Lisa and Graham");
//用serialize函數將這個實例轉化為一個序列化的字符串
$dogdisc = serialize($ourfirstdog);
print $dogdisc; //$ourfirstdog 已經序列化為字符串 O:3:"dog":3:{s:4:"name";s:5:"Rover";s:3:"age";i:12;s:5:"owner";s:15:"Lisa and Graham";}
print '<br />';
/* 
-----------------------------------------------------------------------------------------
    在這裡你可以將字符串 $dogdisc 存儲到任何地方如 session,cookie,數據庫,php文件 
-----------------------------------------------------------------------------------------
*/
//我們在此注銷這個類
unset($ourfirstdog);
/*    還原操作   */
/* 
-----------------------------------------------------------------------------------------
    在這裡將字符串 $dogdisc 從你存儲的地方讀出來如 session,cookie,數據庫,php文件 
-----------------------------------------------------------------------------------------
*/
//我們在這裡用 unserialize() 還原已經序列化的對象
$pet = unserialize($dogdisc); //此時的 $pet 已經是前面的 $ourfirstdog 對象了
//獲得年齡和名字屬性
$old = $pet->getage();
$name = $pet->getname();
//這個類此時無需實例化可以繼續使用,而且屬性和值都是保持在序列化之前的狀態
print "Our first dog is called $name and is $old days old<br />";
print '<br />';
?>

官方的一個程序例子:

<?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 )) { 
     /* 出錯 */ 
     } 
} 
?>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved