Heim  >  Artikel  >  Backend-Entwicklung  >  Serialisierung und Deserialisierung von Objekten in PHP

Serialisierung und Deserialisierung von Objekten in PHP

无忌哥哥
无忌哥哥Original
2018-06-28 15:38:161660Durchsuche

* 1. Serialisierung von Objekten

* 1. Jeder Wert in PHP kann in eine Zeichenfolge serialisiert werden, die eine Byte-Stream-Darstellung enthält

* 2. Serialisierungsobjekte können in Variablen oder gespeichert werden Dateien zum einfachen Speichern und Übertragen

//Numerische Serialisierung

$num = 500;
echo serialize($num),&#39;<br>&#39;;

//String-Serialisierung

$name = &#39;peter&#39;;
echo serialize($name),&#39;<br>&#39;;

//Array-Serialisierung

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

//Boolesche Serialisierung

$isPass = true;
echo serialize($isPass),&#39;<br>&#39;;

//Objektserialisierung: Nehmen Sie eine Datenbankverbindungsklasse als Beispiel

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();

* Merkmale der Objektserialisierung:

* 1. Speichern Sie nur die Attribute im Objekt, nicht die Methode

* 2. Speichern Sie nur den Klassennamen, nicht den Objektnamen

echo serialize($obj);

//Um die Deserialisierung zu demonstrieren, werden wir das serialisierte Objekt in einer Variablen speichern, das ist natürlich auch möglich in einer Datei gespeichert

$tmp1 = serialize($obj);

//Sehen Sie sich den Inhalt der serialisierten Variablen an, der mit dem vorherigen serialisierten Inhalt identisch ist

echo $tmp1;

// Führen Sie nun den Deserialisierungsvorgang durch und nehmen Sie das in der Datei gespeicherte Objekt heraus Variable

$tmp2 = unserialize($tmp1);

//Erkennen Sie, ob $tmp2 ein Objekt ist

echo &#39;<hr>&#39;;
echo is_object($tmp2) ? &#39;对象&#39; : &#39;不是&#39;;
echo &#39;<hr>&#39;;

//Rufen Sie die Attribute ab und zeigen Sie das Datenbankverbindungsobjekt an

var_dump($tmp2->db);


Das obige ist der detaillierte Inhalt vonSerialisierung und Deserialisierung von Objekten in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn