unserialize

(PHP 3 >= 3.0.5, PHP 4, PHP 5)

unserialize --  從已存儲的表示中建立 PHP 的值

描述

mixed unserialize ( string str [, string callback] )

unserialize() 對單一的已序列化的變量進行動作,將其轉換回 PHP 的值。返回的是轉換之後的值,可為 integerfloatstringarrayobject。若果傳遞的字串不可解序列化,則返回 FALSE

unserialize_callback_func 指令: 若果在解序列化的時候需要案例化一個未定義類,則可以設定回呼函數以供呼叫(以免得到的是不完整的 object 「__PHP_Incomplete_Class」)。可通過 php.iniini_set().htaccess 定義『unserialize_callback_func』。每次案例化一個未定義類時它都會被呼叫。若要禁止這個特性,只需置空此設定。還需要注意的是 unserialize_callback_func 指令是從 PHP 4.2.0 開始提供使用的。

注: callback 參數是在 PHP 4.2.0 中增加的

若被解序列化的變量是一個對象,在成功地重新構造物件之後,PHP 會自動地試圖去呼叫 __wakeup() 成員函數(若果存在的話)。

例子 1. unserialize_callback_func 示例

<?php
$serialized_object
='O:1:"a":1:{s:5:"value";s:3:"100";}';

// unserialize_callback_func 從 PHP 4.2.0 起可用
ini_set('unserialize_callback_func','mycallback'); // 設定您的回呼函數

function mycallback($classname) {
    
// 只需包括含有類定義的檔案
    // $classname 指出需要的是哪一個類
}
?>

注: 在 PHP 3 中,解序列化一個物件時是不儲存方法的。而 PHP 4 打破了這個限制,同時儲存了屬性和方法。請參見類與物件中的序列化物件部分取得更多訊息。

例子 2. unserialize() 示例

<?php
// 這裡,我們使用 unserialize() 載入來自資料庫的 $session_data 陣列中的會話資料。
// 此例是描述 serialize() 的那個例子的補充。

$conn odbc_connect ("webdb""php""chicken");
$stmt odbc_prepare ($conn"SELECT data FROM sessions WHERE id = ?");
$sqldata = array ($PHP_AUTH_USER);
if (!
odbc_execute ($stmt, &$sqldata) || !odbc_fetch_into ($stmt, &$tmp)) {
    
// 若果執行出錯或返回錯誤,則起始化為空陣列
    
$session_data = array();
} else {
    
// 現在我們需要的是 $tmp[0] 中已序列化的資料。
    
$session_data unserialize ($tmp[0]);
    if (!
is_array ($session_data)) {
        
// 出錯,起始化為空陣列
        
$session_data = array();
    }
}
?>

參見 serialize()