色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

php反序列化之魔術(shù)方法超詳細(xì)講解

瀏覽:213日期:2022-06-06 08:16:51
目錄
  • php魔術(shù)方法
  • __construct()與__destruct()
  • __call
  • __get
  • __set
  • __isset
  • __unset
  • __sleep
  • __wakeup
  • __toString
  • __invoke

php魔術(shù)方法

在php類保留方法中以 “__”兩個(gè)下劃線開(kāi)頭的函數(shù)稱為魔術(shù)方法,我的理解為php類設(shè)計(jì)中自定義好的函數(shù)。

常見(jiàn)的魔術(shù)方法有:

__construct(),類的構(gòu)造函數(shù)
__destruct(),類的析構(gòu)函數(shù)
__call(),在對(duì)象中調(diào)用一個(gè)不可訪問(wèn)方法時(shí)調(diào)用
__callStatic(),用靜態(tài)方式中調(diào)用一個(gè)不可訪問(wèn)方法時(shí)調(diào)用
__get(),獲得一個(gè)類的成員變量時(shí)調(diào)用
__set(),設(shè)置一個(gè)類的成員變量時(shí)調(diào)用
__isset(),當(dāng)對(duì)不可訪問(wèn)屬性調(diào)用isset()或empty()時(shí)調(diào)用
__unset(),當(dāng)對(duì)不可訪問(wèn)屬性調(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ù),與其他的語(yǔ)言如java,c#,一樣,構(gòu)造函數(shù)就是在對(duì)象實(shí)例化的時(shí)候先執(zhí)行初始化的方法。

__construct()構(gòu)造函數(shù)只有在new 一個(gè)對(duì)象的時(shí)候會(huì)觸發(fā),在serialize 序列化和unserialize反序列化中都不會(huì)觸發(fā)

<?phpclass demo1{    private $k1;    public function __construct()    {echo("構(gòu)造函數(shù)被調(diào)用"."<br>");    }    public  function f1(){echo("f1 函數(shù)被調(diào)用");    }}echo("0000"."<br>");$f=new demo1();echo("1111"."<br>");$a=serialize($f);echo("2222"."<br>");unserialize($a);?>

輸出結(jié)果

__destruct() 析構(gòu)函數(shù)則在對(duì)象銷毀和serialize 反序列化的情況下會(huì)被觸發(fā)。如下

<?phpclass demo1{    private $k1;    public function __destruct()    {echo("析構(gòu)函數(shù)被調(diào)用"."<br>");    }}$f=new demo1();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ā)

<?phpclass demo1{    private $k1;    public  function f1(){echo("f1 函數(shù)被調(diào)用");    }	  //當(dāng)調(diào)用不存在的方法時(shí),方法名作為參數(shù)傳到$name 變量,方法名的輸入?yún)?shù)傳到arguments參數(shù)列表中    public function __call($name, $arguments)    {// TODO: Implement __call() method.echo($name."---".$arguments[0]);    }}$f=new demo1();$f->f2("123");//調(diào)用不存在的方法f2()?>

輸出結(jié)果

__get

__get() 魔術(shù)方法是當(dāng)訪問(wèn)一個(gè)對(duì)象不存在的變量時(shí)就會(huì)被觸發(fā)

<?phpclass demo1{    private $k1;    public  function f1(){echo("f1 函數(shù)被調(diào)用");    }    public function __get($name)//不存在的變量k會(huì)以參數(shù)傳到$name    {echo($name);    }}$f=new demo1();$f->k;//不存在的變量k?>

輸出結(jié)果

__set

__set() 魔術(shù)方法是當(dāng)給一個(gè)對(duì)象不存在的變量賦值時(shí)就會(huì)被觸發(fā)

<?phpheader("Content-Type:text/html;charset=utf-8");highlight_file(__FILE__);class demo1{    private $k1;    public  function f1(){echo("f1 函數(shù)被調(diào)用");    }    public function __set($name, $value)    {echo($name."---".$value);    }}$f=new demo1();$f->k=123; //給不存在的成員變量賦值?>

輸出結(jié)果

__isset

當(dāng)對(duì)不可訪問(wèn)屬性調(diào)用isset()或empty()時(shí)會(huì)觸發(fā),例如訪問(wèn)類的私有屬性,類不存在的成員屬性

<?phpheader("Content-Type:text/html;charset=utf-8");highlight_file(__FILE__);class demo1{    private $k1;    public  function f1(){echo("f1 函數(shù)被調(diào)用");    }    public function __isset($name)    {       echo($name);    }}$f=new demo1();$f2=unserialize(serialize($f));//反序列化isset($f2->k1);//使用isset方法判斷私有成員屬性k1empty($f2->k1);//使用empty方法判斷私有成員屬性k1?>

輸出結(jié)果

__unset

當(dāng)嘗試使用unset() 銷毀函數(shù)去銷毀一個(gè)不可訪問(wèn)的成員屬性時(shí)會(huì)觸發(fā),不可訪問(wèn)(包括私有成員屬性,不存在的成員屬性)

<?phpheader("Content-Type:text/html;charset=utf-8");highlight_file(__FILE__);class demo1{    private $k1;    public  function f1(){echo("f1 函數(shù)被調(diào)用");    }    public function __unset($name)    {echo($name);    }}$f=new demo1();$f2=unserialize(serialize($f));//反序列化unset($f2->k1);//使用unset銷毀私有成員屬性k1unset($f2->faaa);//使用unset銷毀不存在的成員屬性faaa?>

輸出結(jié)果

__sleep

當(dāng)對(duì)象被serialize 序列化時(shí)觸發(fā)調(diào)用__sleep

<?phpheader("Content-Type:text/html;charset=utf-8");highlight_file(__FILE__);class demo1{    private $k1;    public  function f1(){echo("f1 函數(shù)被調(diào)用");    }    public function __sleep()    {echo("在被序列化時(shí)被調(diào)用");    }}$f=new demo1();echo("00000"."</br>");serialize($f);?>

輸出結(jié)果

__wakeup

當(dāng)進(jìn)行unserialize 反序列化對(duì)象時(shí),__wakeup魔術(shù)方法會(huì)被觸發(fā),看起來(lái)__wakeup與__sleep 觸發(fā)條件是相反的

<?phpheader("Content-Type:text/html;charset=utf-8");highlight_file(__FILE__);class demo1{    private $k1;    public  function f1(){echo("f1 函數(shù)被調(diào)用");    }    public function __wakeup()    {echo("在被反序列化時(shí)被調(diào)用");    }}$f=new demo1();$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ò)誤

<?phpheader("Content-Type:text/html;charset=utf-8");highlight_file(__FILE__);class demo1{    private $k1;    public  function f1(){echo("f1 函數(shù)被調(diào)用");    }    public function __toString()    {echo("__toString 被觸發(fā)了");return "";    }}$f=new demo1();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ò)誤

<?phpheader("Content-Type:text/html;charset=utf-8");highlight_file(__FILE__);class demo1{    private $k1;    public  function f1(){echo("f1 函數(shù)被調(diào)用");    }    public function __invoke()    {       echo("__invoke 被觸發(fā)了");    }}$f=new demo1();$f();?>

輸出結(jié)果

到此這篇關(guān)于php反序列化之魔術(shù)方法超詳細(xì)講解的文章就介紹到這了,更多相關(guān)php反序列化 內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

標(biāo)簽: PHP
主站蜘蛛池模板: 99re在线精品视频 | 国产免费成人在线视频 | 日韩欧美一区二区精品久久 | 一级啊片| 欧洲成人免费高清视频 | 日韩欧美亚洲综合久久99e | 污美女网站www在线观看 | 日韩欧美在线观看一区 | 国产欧美久久久另类精品 | 成人精品视频一区二区在线 | 男人和女人的做刺激性视频 | 欧美色道 | 久久久www免费人成看片 | 在线免费观看色 | 久久亚洲综合 | 1024色淫免费视频 | 日韩欧美视频一区二区 | 国产一级毛片视频在线! | 亚洲清纯自偷自拍另类专区 | 成年人性网站 | 97久草| 日韩成人精品日本亚洲 | 国产精品一区二区三区免费 | 暖暖免费高清日本一区二区三区 | 欧美在线观看高清一二三区 | 99视频在线观看免费视频 | 18视频网站在线观看 | 最新更新国内自拍视频 | 一级爱做片免费观看久久 | 成人免费福利网站在线看 | 大学生久久香蕉国产线观看 | 成人小视频在线播放 | 亚洲欧美日韩在线线精品 | 国产在线精品一区免费香蕉 | 黄色网址进入 | 久久国产精品二国产精品 | 欧美一级成人 | 成人午夜做爰视频免费看 | 日p免费视频 | 欧美亚洲不卡 | 精品国产看高清国产毛片 |