Serializable 接口

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

簡介

自定義序列化的接口。

實(shí)現(xiàn)此接口的類將不再支持 __sleep()__wakeup() 。 不論何時(shí),只要有實(shí)例需要被序列化, serialize 方法都將被調(diào)用。它不會調(diào)用 __destruct(),除非在該方法中編寫了相關(guān)功能,否則它也不會有副作用(side effect)。 當(dāng)數(shù)據(jù)被反序列化時(shí),類將被感知并且調(diào)用合適的 unserialize() 方法而不是調(diào)用 __construct()。如果需要執(zhí)行標(biāo)準(zhǔn)的構(gòu)造器,應(yīng)該在這個(gè)方法中進(jìn)行處理。

警告

從 PHP 8.1.0 起,實(shí)現(xiàn) Serializable 接口的類如果沒有同時(shí)實(shí)現(xiàn) __serialize()、__unserialize() 方法,將產(chǎn)生棄用警告。

接口摘要

interface Serializable {
/* 方法 */
public serialize(): ?string
public unserialize(string $data): void
}

示例 #1 基礎(chǔ)用法

<?php
class obj implements Serializable {
    private 
$data;
    public function 
__construct() {
        
$this->data "My private data";
    }
    public function 
serialize() {
        return 
serialize($this->data);
    }
    public function 
unserialize($data) {
        
$this->data unserialize($data);
    }
    public function 
getData() {
        return 
$this->data;
    }
}

$obj = new obj;
$ser serialize($obj);

var_dump($ser);

$newobj unserialize($ser);

var_dump($newobj->getData());
?>

以上例程的輸出類似于:

string(38) "C:3:"obj":23:{s:15:"My private data";}"
string(15) "My private data"

目錄