版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第php反序列化之魔術(shù)方法超詳細(xì)講解目錄php魔術(shù)方法__construct()與__destruct()__call__get__set__isset__unset__sleep__wakeup__toString__invoke
php魔術(shù)方法
在php類保留方法中以__兩個(gè)下劃線開頭的函數(shù)稱為魔術(shù)方法,我的理解為php類設(shè)計(jì)中自定義好的函數(shù)。
常見的魔術(shù)方法有:
__construct(),類的構(gòu)造函數(shù)
__destruct(),類的析構(gòu)函數(shù)
__call(),在對(duì)象中調(diào)用一個(gè)不可訪問方法時(shí)調(diào)用
__callStatic(),用靜態(tài)方式中調(diào)用一個(gè)不可訪問方法時(shí)調(diào)用
__get(),獲得一個(gè)類的成員變量時(shí)調(diào)用
__set(),設(shè)置一個(gè)類的成員變量時(shí)調(diào)用
__isset(),當(dāng)對(duì)不可訪問屬性調(diào)用isset()或empty()時(shí)調(diào)用
__unset(),當(dāng)對(duì)不可訪問屬性調(diào)用unset()時(shí)被調(diào)用
__sleep(),執(zhí)行serialize()時(shí),先會(huì)調(diào)用這個(gè)函數(shù)
__wakeup(),執(zhí)行unserialize()時(shí),先會(huì)調(diào)用這個(gè)函數(shù)
__toString(),類被當(dāng)成字符串時(shí)的回應(yīng)方法
__invoke(),調(diào)用函數(shù)的方式調(diào)用一個(gè)對(duì)象時(shí)的回應(yīng)方法
__set_state(),調(diào)用var_export()導(dǎo)出類時(shí),此靜態(tài)方法會(huì)被調(diào)用
__clone(),當(dāng)對(duì)象復(fù)制完成時(shí)調(diào)用
__autoload(),嘗試加載未定義的類
__debugInfo(),打印所需調(diào)試信息
__construct()與__destruct()
__construct()構(gòu)造函數(shù)與__destruct()析構(gòu)函數(shù),與其他的語言如java,c#,一樣,構(gòu)造函數(shù)就是在對(duì)象實(shí)例化的時(shí)候先執(zhí)行初始化的方法。
__construct()構(gòu)造函數(shù)只有在new一個(gè)對(duì)象的時(shí)候會(huì)觸發(fā),在serialize序列化和unserialize反序列化中都不會(huì)觸發(fā)
php
classdemo1{
private$k1;
publicfunction__construct()
echo("構(gòu)造函數(shù)被調(diào)用"."br
publicfunctionf1(){
echo("f1函數(shù)被調(diào)用");
echo("0000"."br
$f=newdemo1();
echo("1111"."br
$a=serialize($f);
echo("2222"."br
unserialize($a);
輸出結(jié)果
__destruct()析構(gòu)函數(shù)則在對(duì)象銷毀和serialize反序列化的情況下會(huì)被觸發(fā)。如下
php
classdemo1{
private$k1;
publicfunction__destruct()
echo("析構(gòu)函數(shù)被調(diào)用"."br
$f=newdemo1();
echo("0000"."br
$a=serialize($f);
echo("1111"."br
unset($f);
echo("2222"."br
unserialize($a);
輸出結(jié)果
__call
__call魔術(shù)方法的作用是當(dāng)前對(duì)象調(diào)用一個(gè)不存在的方法時(shí),就會(huì)被觸發(fā)
php
classdemo1{
private$k1;
publicfunctionf1(){
echo("f1函數(shù)被調(diào)用");
//當(dāng)調(diào)用不存在的方法時(shí),方法名作為參數(shù)傳到$name變量,方法名的輸入?yún)?shù)傳到arguments參數(shù)列表中
publicfunction__call($name,$arguments)
//TODO:Implement__call()method.
echo($name."---".$arguments[0]);
$f=newdemo1();
$f-f2("123");//調(diào)用不存在的方法f2()
輸出結(jié)果
__get
__get()魔術(shù)方法是當(dāng)訪問一個(gè)對(duì)象不存在的變量時(shí)就會(huì)被觸發(fā)
php
classdemo1{
private$k1;
publicfunctionf1(){
echo("f1函數(shù)被調(diào)用");
publicfunction__get($name)//不存在的變量k會(huì)以參數(shù)傳到$name
echo($name);
$f=newdemo1();
$f-//不存在的變量k
輸出結(jié)果
__set
__set()魔術(shù)方法是當(dāng)給一個(gè)對(duì)象不存在的變量賦值時(shí)就會(huì)被觸發(fā)
php
header("Content-Type:text/html;charset=utf-8");
highlight_file(__FILE__);
classdemo1{
private$k1;
publicfunctionf1(){
echo("f1函數(shù)被調(diào)用");
publicfunction__set($name,$value)
echo($name."---".$value);
$f=newdemo1();
$f-k=123;//給不存在的成員變量賦值
輸出結(jié)果
__isset
當(dāng)對(duì)不可訪問屬性調(diào)用isset()或empty()時(shí)會(huì)觸發(fā),例如訪問類的私有屬性,類不存在的成員屬性
php
header("Content-Type:text/html;charset=utf-8");
highlight_file(__FILE__);
classdemo1{
private$k1;
publicfunctionf1(){
echo("f1函數(shù)被調(diào)用");
publicfunction__isset($name)
echo($name);
$f=newdemo1();
$f2=unserialize(serialize($f));//反序列化
isset($f2-//使用isset方法判斷私有成員屬性k1
empty($f2-//使用empty方法判斷私有成員屬性k1
輸出結(jié)果
__unset
當(dāng)嘗試使用unset()銷毀函數(shù)去銷毀一個(gè)不可訪問的成員屬性時(shí)會(huì)觸發(fā),不可訪問(包括私有成員屬性,不存在的成員屬性)
php
header("Content-Type:text/html;charset=utf-8");
highlight_file(__FILE__);
classdemo1{
private$k1;
publicfunctionf1(){
echo("f1函數(shù)被調(diào)用");
publicfunction__unset($name)
echo($name);
$f=newdemo1();
$f2=unserialize(serialize($f));//反序列化
unset($f2-//使用unset銷毀私有成員屬性k1
unset($f2-faaa);//使用unset銷毀不存在的成員屬性faaa
輸出結(jié)果
__sleep
當(dāng)對(duì)象被serialize序列化時(shí)觸發(fā)調(diào)用__sleep
php
header("Content-Type:text/html;charset=utf-8");
highlight_file(__FILE__);
classdemo1{
private$k1;
publicfunctionf1(){
echo("f1函數(shù)被調(diào)用");
publicfunction__sleep()
echo("在被序列化時(shí)被調(diào)用");
$f=newdemo1();
echo("00000"."/br
serialize($f);
輸出結(jié)果
__wakeup
當(dāng)進(jìn)行unserialize反序列化對(duì)象時(shí),__wakeup魔術(shù)方法會(huì)被觸發(fā),看起來__wakeup與__sleep觸發(fā)條件是相反的
php
header("Content-Type:text/html;charset=utf-8");
highlight_file(__FILE__);
classdemo1{
private$k1;
publicfunctionf1(){
echo("f1函數(shù)被調(diào)用");
publicfunction__wakeup()
echo("在被反序列化時(shí)被調(diào)用");
$f=newdemo1();
$uz=serialize($f);
echo("00000"."/br
unserialize($uz);
輸出結(jié)果
__toString
如果一個(gè)對(duì)象類中存在__toString魔術(shù)方法,這個(gè)對(duì)象類被當(dāng)做字符串進(jìn)行處理時(shí),就會(huì)觸發(fā)__toString魔術(shù)方法,而不會(huì)產(chǎn)生錯(cuò)誤
php
header("Content-Type:text/html;charset=utf-8");
highlight_file(__FILE__);
classdemo1{
private$k1;
publicfunctionf1(){
echo("f1函數(shù)被調(diào)用");
publicfunction__toString()
echo("__toString被觸發(fā)了");
return"";
$f=newdemo1();
echo($f);
輸出結(jié)果
__invoke
當(dāng)一個(gè)對(duì)象類中存在__invoke魔術(shù)方法,這個(gè)對(duì)象類被當(dāng)作函數(shù)進(jìn)行調(diào)用時(shí),就會(huì)觸發(fā)__invoke魔術(shù)方法,而不會(huì)產(chǎn)生錯(cuò)誤
php
header(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 環(huán)境衛(wèi)生督導(dǎo)員工作制度
- 我國衛(wèi)生籌資制度
- 衛(wèi)生室管理使用制度
- 幼兒衛(wèi)生保健室制度
- 衛(wèi)生院急診危重制度
- 學(xué)校衛(wèi)生隔離室工作制度
- 生活區(qū)食堂衛(wèi)生管理制度
- 衛(wèi)生清掃與管理制度
- 漢堡店食品衛(wèi)生管理制度
- 2025年農(nóng)村人居環(huán)境五年評(píng)估報(bào)告
- 《開學(xué)第一課:龍馬精神·夢(mèng)想起航》課件 2025-2026學(xué)年統(tǒng)編版語文七年級(jí)下冊(cè)
- 2026年洪湖市事業(yè)單位人才引進(jìn)100人參考考試題庫及答案解析
- 2026年中好建造(安徽)科技有限公司第一次社會(huì)招聘42人筆試參考題庫及答案解析
- 北京市海淀區(qū)2025一2026學(xué)年度第一學(xué)期期末統(tǒng)一檢測(cè)歷史(含答案)
- 2026年科研儀器預(yù)約使用平臺(tái)服務(wù)協(xié)議
- 新《增值稅法實(shí)施條例》逐條解讀課件
- 2026年廣西職教高考5套語文模擬試卷試題及逐題答案解釋和5套試題的綜合分析報(bào)告
- 領(lǐng)導(dǎo)干部任職前廉政法規(guī)知識(shí)測(cè)試題及答案(2025年)
- 內(nèi)分泌急癥識(shí)別與應(yīng)急護(hù)理預(yù)案
- 急危重癥患者氣道管理新進(jìn)展
評(píng)論
0/150
提交評(píng)論