簡單分析PHP中序列化用法介紹
序列化在我們學習php中都會有用到了對於序列化我們常用的函數有serialize和unserialize了,希望以下這篇文章能夠幫助到各位瞭解到PHP中序列化用法,具體如下:
0x00 序列化函數
serialize():返回帶有變量類型和值的字符串
unserialize():想要將已序列化的字符串變回 PHP 的值
測試代碼:
<?php
class test{
var $a;
var $b;
function __construct($a,$b,$c){
$a = $a;
$this->b = $b;
}
}
class test1 extends test{
function __construct($a){
$this->a = $a;
}
}
$a = 'hello';
$b = 123;
$c = false;
$d = new test('helloa','hellob','helloc');
$e = new test1('hello');
var_dump(serialize($a));
var_dump(serialize($b));
var_dump(serialize($c));
var_dump(serialize($d));
var_dump(serialize($e));
?>
運行結果:
string 's:5:"hello";' (length=12)
string 'i:123;' (length=6)
string 'b:0;' (length=4)
string 'O:4:"test":2:{s:1:"a";N;s:1:"b";s:6:"hellob";}' (length=46)
string 'O:5:"test1":2:{s:1:"a";s:5:"hello";s:1:"b";N;}' (length=46)
序列化字符串格式: 變量類型:變量長度:變量內容 。
如果序列化的是一個對象,序列化字符串格式爲:
變量類型:類名長度:類名:屬性數量:{屬性類型:屬性名長度:屬性名;屬性值類型:屬性值長度:屬性值內容}
將上述結果反序列化輸出,執行結果:
string 'hello' (length=5)
int 123
boolean false
object(test)[1]
public 'a' => null
public 'b' => string 'hellob' (length=6)
object(test1)[1]
public 'a' => string 'hello' (length=5)
public 'b' => null
0x01 對象序列化
當序列化對象時,PHP 將在序列動作之前調用該對象的成員函數 sleep()。這樣就允許對象在被序列化之前做任何清除操作。類似的,當使用 unserialize() 恢復對象時, 將調用 wakeup()成員函數。
在serialize()函數執行時,會先檢查類中是否定義了 sleep()函數,如果存在,則首先調用 sleep()函數,如果不存在,就保留序列字符串中的所有屬性。
在unserialize()函數執行時,會先檢查是否定義了 wakeup()函數。如果 wakeup()存在,將執行__wakeup()函數,會使變量被重新賦值。
serialize()測試代碼:
<?php
class test{
var $a;
var $b;
function __construct($a,$b,$c){
$this->a = $a;
$this->b = $b;
}
function __sleep(){
echo "b has changed"."n";
$this->b = 'hib';
return $this->b;
}
function __wakeup(){
echo "a has changed"."n";
$this->a = 'hia';
}
}
class test1 extends test{
function __construct($a){
$this->a = $a;
}
}
$d = new test('helloa','hellob','helloc');
$e = new test1('hello');
serialize($d);
serialize($e);
var_dump($d);
var_dump($e);
?>
執行結果:
b has changed b has changed
object(test)[1]
public 'a' => string 'helloa' (length=6)
public 'b' => string 'hib' (length=3)
object(test1)[2]
public 'a' => string 'hello' (length=5)
public 'b' => string 'hib' (length=3)
unserialize()測試代碼:
class test{
var $a;
var $b;
function __construct($a,$b,$c){
$this->a = $a;
$this->b = $b;
}
function __sleep(){
echo "b has changed"."n";
$this->b = 'hib';
return $this->b;
}
function __wakeup(){
echo "a has changed"."n";
$this->a = 'hia';
}
}
class test1 extends test{
function __construct($a){
$this->a = $a;
}
}
$d = 'O:4:"test":2:{s:1:"a";N;s:1:"b";s:6:"hellob";}' ;
相關文章
-
PHP多種序列化和反序列化的方法
序列化是將變量轉換爲可保存或傳輸的字符串的過程;反序列化就是在適當的時候把這個字符串再轉化成原來的變量使用。這兩個過程結合起來,可以輕鬆地存儲和傳輸數據,使程序更具維護性。 1. serialize和unserialize函數 -
php多種序列化、反序列化的方法
導語:序列化是將變量轉換爲可保存或傳輸的字符串的過程;反序列化就是在適當的時候把這個字符串再轉化成原來的變量使用。下面就由小編爲大家介紹一下php多種序列化、反序列化的方法,歡迎大家閱讀!1. serialize和unseriali -
php中序列化和json使用方法
導語:序列化是將對象狀態轉換爲可保持或可傳輸的格式的過程。與序列化相對的是反序列化,它將流轉換爲對象。這兩個過程結合起來,可以輕鬆地存儲和傳輸數據。下面的是本站小編爲大家蒐集的php中序列化和json使用方法,希望 -
簡單介紹php構造函數用法
構造函數意思就是在類執行時通過構造函數作爲入口進行操作了,下面我們來看一篇關於php構造函數用法文章吧。 構造函數 和 析構函數 構造函數void __construct ([ mixed $args [, $... ]] )PHP 5 允行開發者在一 -
PHP中strnatcmp()函數“自然排序算法”進行字符串比較用法分析
本文實例講述了PHP中statcmp()函數“自然排序算法”進行字符串比較用法。分享給大家供大家參考,具體如下:PHP中statcmp()函數使用"自然"算法來比較兩個字符串(區分大小寫),通常在自然算法中,數字 2 小於數字 10。而在計算機 -
thinkPHP簡單遍歷數組方法分析
文章主要介紹了thinkPHP簡單遍歷數組方法,結合實例形式分析了thinkPHP使用volist標籤遍歷數組的`技巧,並對比分析了織夢cms的arclist標籤加強對thinkPHP數組遍歷的理解,需要的朋友可以參考下。本文實例分析了thinkPHP -
隊列在編程中的實際應用(php)-php技巧
隊列在編程中的實際應用(php)_php技巧一:隊列的概念、數據結構隊列(Queue)是運算受到限制的一種線性表。只允許在表的一端進行插入,而在另一端進行刪除元素的線性表。隊尾(rear)是允許插入的一端。隊頭(front)是允許刪除 -
分析php選擇排序法實現數組排序的方法
本文實例分析了php選擇排序法實現數組排序的.方法。分享給大家供大家參考。具體分析如下:選擇排序法的基本思路:直接用案例來說明吧,比如有一個數組$arr = array(2,6,3,9),從大到小排序。第一次大循環:它首先假設$arr[0]爲 -
用用PHP寫的一個冒泡排序法的函數簡單實例
前幾天遇到的一道關於算法的`考題,要求用PHP語言實現對一個數組進行排序,我寫了一個採用冒泡排序法的函數,和大家分享一下。<?//冒泡排序法function bubble_sort($array){$count = count($array);if($count <= 0){retu f -
用Photoshop進行圖片轉手繪的簡單介紹
1定義:轉手繪(又名:轉鼠繪、仿手繪、仿鼠繪)是利用圖片處理工具(photoshop),將人物或風景照片轉變成類似手繪效果的一種圖片處理方法。全名:照片轉手繪效果。是衆多PS效果中複雜性比較大、技術要求相對較高的一種效果