首頁 後端開發 php教程 php中物件的序列化與反序列化

php中物件的序列化與反序列化

Jun 28, 2018 pm 03:38 PM

 * 一、物件的序列化

 * 1.php中的任何值都可以序列化為包含位元組流表示的字串來表示

 * 2.序列化物件可以保存到變數或檔案,方便保存和傳送

//數值序列化

$num = 500;
echo serialize($num),&#39;<br>&#39;;
登入後複製

//字串序列化

$name = &#39;peter&#39;;
echo serialize($name),&#39;<br>&#39;;
登入後複製

//陣列序列化

$course = [&#39;php&#39;,&#39;mysql&#39;,&#39;thinkphp&#39;];
echo serialize($course),&#39;<br>&#39;;
登入後複製

//布林序列化

$isPass = true;
echo serialize($isPass),&#39;<br>&#39;;
登入後複製

//物件序列化:以一個資料庫連接類別為例

class Db
{
    //连接参数与返回值
    public $db = null;
    public $host;
    private $user;
    private $pass;
    //构造方法
    public function __construct($host=&#39;localhost&#39;,$user=&#39;root&#39;,$pass=&#39;root&#39;)
    {
        //类属性初始化
        $this->host = $host;
        $this->user = $user;
        $this->pass = $pass;
        
        //创建对象时自动连接数据库
        $this->connect();
    }
    
    //连接数据库的方法
    private function connect()
    {
        $this->db = mysqli_connect($this->host,$this->user, $this->pass);
    }
    
    //serialize($obj)序列化的时候,会自动调用__sleep(void)
    //主要用于对象休眠时的一些清理工作,例如指定哪些属性允许进入到休眠对象的属性序列中
    public function __sleep()
    {
        //返回由属性名字符串组成的索引数组,指示序列化时要保存的字段名
        return [&#39;host&#39;,&#39;user&#39;,&#39;pass&#39;];
        //对于本案例来说,如果连接参数不变的情况下,只要将$this->db保存到对象序列中即可
//        return [&#39;db&#39;];
    }
    
    //unserialize()反序列化的时候,会自动调用__wakeup(void)
    //主要用于唤醒对象时要做的初始化工作,例如本例中的:自动连接数据库
    public function __wakeup()
    {
        $this->connect();
    }
    
}
$obj = new Db();
登入後複製

 * 物件序列化的特性:

# * 1.只保存物件中的屬性,不保存方法

 * 2.只保存類別名稱,不保存物件名稱

echo serialize($obj);
登入後複製

//為了示範反序列化,我們將序列化的物件保存到一個變數中,當然也可以保存到檔案中

$tmp1 = serialize($obj);
登入後複製

//查看序列化後的變數內容,與先前序列化內容是一樣的

echo $tmp1;
登入後複製

//現在進行反序列化操作,將儲存到變數中的物件取出來

$tmp2 = unserialize($tmp1);
登入後複製

//偵測$tmp2是否為物件

echo &#39;<hr>&#39;;
echo is_object($tmp2) ? &#39;对象&#39; : &#39;不是&#39;;
echo &#39;<hr>&#39;;
登入後複製

//取得屬性,檢視資料庫連線物件

var_dump($tmp2->db);
登入後複製


以上是php中物件的序列化與反序列化的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1324
25
PHP教程
1272
29
C# 教程
1251
24
php數組如何循環轉為對象 php數組如何循環轉為對象 Aug 10, 2023 pm 02:44 PM

php數組循環轉為對象的方法有兩個:1、使用強制類型轉換可以將數組轉換為對象,要求數組的鍵必須是有效的對象屬性名;2、創建一個新的對象,並將數組的元素複製到該物件中,不依賴陣列鍵是否有效作為物件的屬性名稱。

PHP中的序列化是什麼?潛在的安全風險是什麼? PHP中的序列化是什麼?潛在的安全風險是什麼? Apr 02, 2025 pm 05:45 PM

PHP中的序列化是將對像或數據結構轉換為字符串的過程,主要通過serialize()和unserialize()函數實現。序列化用於保存對象狀態,以便在不同請求或系統間傳遞。潛在安全風險包括對象注入攻擊和信息洩露,避免方法包括:1.限制反序列化的類,使用unserialize()函數的第二個參數;2.驗證數據源,確保來自可信來源;3.考慮使用JSON等更安全的數據格式。

php物件操作和陣列操作哪個快 php物件操作和陣列操作哪個快 Jul 12, 2023 pm 03:04 PM

php數組操作比php物件操作更快,原因有:1、物件操作涉及創建物件、呼叫方法和存取屬性等步驟,在效能上可能會比較慢;2、陣列操作是一種特殊類型的變量,可以容納多個值,對數組使用不同的方法和函數,可以對數組進行快速和有效的操作。

php物件和陣列差異是什麼 php物件和陣列差異是什麼 Aug 24, 2023 pm 05:02 PM

php物件和陣列區別是:1、物件是一個複合資料類型,而陣列則是簡單的資料類型;2、物件的屬性和方法可以透過物件的實例來訪問,而陣列的元素可以透過索引來存取; 3、物件是一個封裝了屬性和方法的實體,而陣列是一個有序的元素集合;4、物件在PHP中是透過引用來傳遞的,而陣列在PHP中是透過值來傳遞的;5、物件適用於描述具有狀態和行為的實體,而陣列適用於儲存和處理大量的相似資料。

php數組是物件嗎 php數組是物件嗎 Jul 22, 2022 pm 05:24 PM

php數組不是物件。在php中,陣列和物件是兩種不同的資料類型,陣列是一組有序資料的集合;而物件是類別進行實例化後的結果,裡面不僅有屬性,還有方法。物件可以封裝對資料的操作,而陣列是辦不到的。

如何在PHP中使用物件變數 如何在PHP中使用物件變數 Sep 13, 2023 pm 12:59 PM

如何在PHP中使用物件變量,需要具體程式碼範例在PHP中,使用物件變數可以更方便地管理和操作物件。物件變數是儲存物件實例的一種資料類型,可以透過呼叫類別的方法和存取類別的屬性來操作物件。以下將具體介紹在PHP中如何使用物件變量,並提供對應的程式碼範例。建立物件在PHP中,可以使用new關鍵字來建立物件。範例如下:classCar{public$colo

探討如何在PHP中呼叫物件方法 探討如何在PHP中呼叫物件方法 Mar 28, 2023 pm 03:00 PM

PHP是一種非常流行的程式語言,可以用於開發各種應用程序,尤其是Web應用程式。在PHP中,物件導向程式設計是其重要特性之一。本文將探討如何在PHP中呼叫物件方法。

php怎麼取得一個物件中所有的方法 php怎麼取得一個物件中所有的方法 Mar 23, 2023 am 11:12 AM

在PHP中,取得一個物件中所有的方法都非常簡單,可以利用PHP標準庫中的 ReflectionClass 類別實作。 ReflectionClass 類別提供了在PHP中反射一個類別的所有資訊的方法,包括類別名稱、屬性和方法等。下面我們詳細介紹如何使用 ReflectionClass 類別來取得一個物件中所有的方法。

See all articles