php 序列化 java_PHP--序列化与反序列化详解
PHP--序列化與反序列化詳解
博客說明
文章所涉及的資料來自互聯網整理和個人總結,意在于個人學習和經驗匯總,如有什么地方侵權,請聯系本人刪除,謝謝!
說明
所有php里面的值都可以使用函數serialize()來返回一個包含字節流的字符串來表示。unserialize()函數能夠重新把字符串變回php原來的值。 序列化一個對象將會保存對象的所有變量,但是不會保存對象的方法,只會保存類的名字。
為了能夠unserialize()一個對象,這個對象的類必須已經定義過。如果序列化類A的一個對象,將會返回一個跟類A相關,而且包含了對象所有變量值的字符串。 如果要想在另外一個文件中解序列化一個對象,這個對象的類必須在解序列化之前定義,可以通過包含一個定義該類的文件或使用函數spl_autoload_register()來實現。
PHP序列化:serialize
序列化是將變量或對象轉換成字符串的過程。
class student{
public $name;
public $age;
public $number;
//_construct:創建對象時初始化
function __construct($name,$age,$number){
$this->name = $name;
$this->age = $age;
$this->number = $number;
}
}
$student = new student("Jack",22,11086);
var_dump(serialize($student));
?>
測試運行
string(76) "O:7:"student":3:{s:4:"name";s:4:"Jack";s:3:"age";i:22;s:6:"number";i:11086;}"
PHP反序列化:unserialize
反序列化是將字符串轉換成變量或對象的過程。
class student{
public $name;
public $age;
public $number;
//_construct:創建對象時初始化
function __construct($name,$age,$number){
$this->name = $name;
$this->age = $age;
$this->number = $number;
}
}
$student = 'O:7:"student":3:{s:4:"name";s:4:"Jack";s:3:"age";i:22;s:6:"number";i:11086;}';
var_dump(unserialize($student));
?>
測試運行
object(student)#1 (3) {
["name"]=>
string(4) "Jack"
["age"]=>
int(22)
["number"]=>
int(11086)
}
魔術函數
函數
說明
__construct()
類的構造函數
__destruct()
類的析構函數
__call()
在對象中調用一個不可訪問方法時調用
__callStatic()
用靜態方式中調用一個不可訪問方法時調用
__get()
獲得一個類的成員變量時調用
__set()
設置一個類的成員變量時調用
__isset()
當對不可訪問屬性調用isset()或empty()時調用
__unset()
當對不可訪問屬性調用unset()時被調用
__sleep()
執行serialize()時,先會調用這個函數
__wakeup()
執行unserialize()時,先會調用這個函數
__toString()
類被當成字符串時的回應方法
__invoke()
調用函數的方式調用一個對象時的回應方法
__set_state()
調用var_export()導出類時,此靜態方法會被調用
__clone
當對象復制完成時調用
__autoload()
嘗試加載未定義的類
__debugInfo()
打印所需調試信息
為什么突然說到魔術函數呢,因為在序列化和反序列化的時候經常會用到__construct(),__destruct(),__sleep(),__wakeup()
在后面的博客里面有相應的ctf實例
感謝
萬能的網絡
以及勤勞的自己
總結
以上是生活随笔為你收集整理的php 序列化 java_PHP--序列化与反序列化详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tia v15 添加项目_硬技能,TIA
- 下一篇: pyecharts x轴字体大小调整_p