php中对象怎么访问i属性_PHP--序列化与反序列化详解
PHP--序列化與反序列化詳解
博客說明
文章所涉及的資料來自互聯網整理和個人總結,意在于個人學習和經驗匯總,如有什么地方侵權,請聯系本人刪除,謝謝!
說明
學到網絡安全的時候用到了序列化和反序列化的操作,感覺挺有用的,首先給出文檔地址https://www.php.net/manual/zh/language.oop5.serialization.php
所有php里面的值都可以使用函數serialize()來返回一個包含字節流的字符串來表示。unserialize()函數能夠重新把字符串變回php原來的值。 序列化一個對象將會保存對象的所有變量,但是不會保存對象的方法,只會保存類的名字。
為了能夠unserialize()一個對象,這個對象的類必須已經定義過。如果序列化類A的一個對象,將會返回一個跟類A相關,而且包含了對象所有變量值的字符串。 如果要想在另外一個文件中解序列化一個對象,這個對象的類必須在解序列化之前定義,可以通過包含一個定義該類的文件或使用函數spl_autoload_register()來實現。
PHP序列化:serialize
序列化是將變量或對象轉換成字符串的過程。
<?phpclass 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
反序列化是將字符串轉換成變量或對象的過程。
<?phpclass 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中对象怎么访问i属性_PHP--序列化与反序列化详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python调用接口实例化_python
- 下一篇: phpstrom查看代码总行数_歪特内推