溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP 序列化和反序列化函數怎么用

發布時間:2021-03-05 16:55:58 來源:億速云 閱讀:166 作者:TREX 欄目:開發技術

本篇內容主要講解“PHP 序列化和反序列化函數怎么用 ”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“PHP 序列化和反序列化函數怎么用 ”吧!

序列化與反序列化

把復雜的數據類型壓縮到一個字符串中

serialize() 把變量和它們的值編碼成文本形式
unserialize() 恢復原先變量 

1.創建一個$arr數組用于儲存用戶基本信息,并在瀏覽器中輸出查看結果;

$arr=array();
$arr['name']='張三';
$arr['age']='22';
$arr['sex']='男';
$arr['phone']='123456789';
$arr['address']='上海市浦東新區';
var_dump($arr);

輸出結果:

array(5) { 
["name"]=> string(6) "張三" 
["age"]=> string(2) "22" 
["sex"]=> string(3) "男" 
["phone"]=> string(9) "123456789" 
["address"]=> string(21) "上海市浦東新區"
 }

2.將$arr數組進行序列化賦值給$info字符串,并在瀏覽器中輸出查看結果;

$info=serialize($arr);
var_dump($info);

輸出結果:

string(140) "a:5:{s:4:"name";s:6:"張三";s:3:"age";s:2:"22";s:3:"sex";s:3:"男";s:5:"phone";s:9:"123456789";s:7:"address";s:21:"上海市浦東新區";}"

使用序列化serialize($arr)函數,將數組中元素的鍵和值按照規則順序連接成字符串。a:5標志序列化為array包含5個鍵值對,s:4標志內容為字符串包含4個字符。

通過序列化我們可以將一些模塊化的數據使用字符串的形式存儲在數據庫或session等,可以減少創建眾多繁瑣的數據表字段,當然序列化為字符串存儲會增加額外的空間,應合理的設計和應用。

3.最后使用unserialize($info)反序列化將字符串還原成我們需要的數組模式;

$zhangsan=unserialize($info);
var_dump($zhangsan);

輸出結果:

array(5) {
["name"]=> string(6) "張三" 
["age"]=> string(2) "22" 
["sex"]=> string(3) "男" 
["phone"]=> string(9) "123456789" 
["address"]=> string(21) "上海市浦東新區" 
}

PHP序列化反序列化serialize和unserialize函數

昨天網上看到一道面試題,如下:

“類的屬性可以序列化后保存到session中,從而以后可以恢復整個類,這要用到的函數是?”

我記得原來老師說過序列化函數是"serialize",查了下,果不其然,今天記錄下,免得忘記。

<?php
  class aa{
    public $a = 1;
    private $b = 2;
    protected $c = 3;
 
    function afun(){
      return $this->a;
    }
    function bfun(){
      return $this->b;
    }
    function __destruct(){
      echo "變量銷毀了";
    }
  }
 
  $v = new aa;
  echo $v->afun();
  $se = serialize($v);
  unset($v); //這里先銷毀$v,這個時候會自動調用析構函數
  echo "<hr />";
  $v = unserialize($se); //再反序列化
  echo $v->bfun();

看看運行結果

PHP 序列化和反序列化函數怎么用

如果覺得還不明顯, 好,我們在改一下代碼

aa.class.php

<?php
  class aa{
    public $a = 1;
    private $b = 2;
    protected $c = 3;
 
    function afun(){
      return '$a的值是:'.$this->a;
    }
    function bfun(){
      return '$b的值是:'.$this->b;
    }
  }

a1.php

<?php
  require './demo8.php';
  Session_start();
  $v = new aa();
  $_SESSION['v'] = serialize($v);

a2.php

<?php
  require './demo8.php';
  Session_start();
  $v = unserialize($_SESSION['v']);
  echo $v->bfun();

再看看結果是不是一目了然了呢,好了,試驗做完了,結論調用下公論。
例子中的對象我們還可以換為數組等其他類型,效果都是一樣的!
其實serialize()就是將PHP中的變量如對象(object),數組(array)等等的值序列化為字符串后存儲起來.序列化的字符串我們可以存儲在其他地方如數據庫、Session、Cookie等,序列化的操作并不會丟失這些值的類型和結構。這樣這些變量的數據就可以在PHP頁面、甚至是不同PHP程序間傳遞了。
而unserialize()就是把序列化的字符串轉換回PHP的值。

這里再引用一段PHP手冊上的說明,看了上面的例子,應該很容易明白下面這些話的意思了
想要將已序列化的字符串變回 PHP 的值,可使用 unserialize()。serialize() 可處理除了 resource 之外的任何類型。甚至可以 serialize() 那些包含了指向其自身引用的數組。你正 serialize() 的數組/對象中的引用也將被存儲。

當序列化對象時,PHP 將試圖在序列動作之前調用該對象的成員函數 __sleep()。這樣就允許對象在被序列化之前做任何清除操作。類似的,當使用 unserialize() 恢復對象時, 將調用 __wakeup() 成員函數
unserialize() 對單一的已序列化的變量進行操作,將其轉換回 PHP 的值。返回的是轉換之后的值,可為 integer、float、string、array 或 object。如果傳遞的字符串不可解序列化,則返回 FALSE。


到此,相信大家對“PHP 序列化和反序列化函數怎么用 ”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女