电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

php反序列化之魔術方法超詳細講解

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

php魔術方法

在php類保留方法中以 “__”兩個下劃線開頭的函數稱為魔術方法,我的理解為php類設計中自定義好的函數。

常見的魔術方法有:

__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()

__construct() 構造函數與 __destruct() 析構函數,與其他的語言如java,c#,一樣,構造函數就是在對象實例化的時候先執行初始化的方法。

__construct()構造函數只有在new 一個對象的時候會觸發,在serialize 序列化和unserialize反序列化中都不會觸發

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

輸出結果

__destruct() 析構函數則在對象銷毀和serialize 反序列化的情況下會被觸發。如下

<?phpclass demo1{    private $k1;    public function __destruct()    {echo("析構函數被調用"."<br>");    }}$f=new demo1();echo("0000"."<br>");$a=serialize($f);echo("1111"."<br>");unset($f);echo("2222"."<br>");unserialize($a);?>

輸出結果

__call

__call 魔術方法的作用是當前對象調用一個不存在的方法時,就會被觸發

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

輸出結果

__get

__get() 魔術方法是當訪問一個對象不存在的變量時就會被觸發

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

輸出結果

__set

__set() 魔術方法是當給一個對象不存在的變量賦值時就會被觸發

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

輸出結果

__isset

當對不可訪問屬性調用isset()或empty()時會觸發,例如訪問類的私有屬性,類不存在的成員屬性

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

輸出結果

__unset

當嘗試使用unset() 銷毀函數去銷毀一個不可訪問的成員屬性時會觸發,不可訪問(包括私有成員屬性,不存在的成員屬性)

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

輸出結果

__sleep

當對象被serialize 序列化時觸發調用__sleep

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

輸出結果

__wakeup

當進行unserialize 反序列化對象時,__wakeup魔術方法會被觸發,看起來__wakeup與__sleep 觸發條件是相反的

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

輸出結果

__toString

如果一個對象類中存在__toString魔術方法,這個對象類被當做字符串進行處理時,就會觸發__toString魔術方法,而不會產生錯誤

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

輸出結果

__invoke

當一個對象類中存在__invoke魔術方法,這個對象類被當作函數進行調用時,就會觸發__invoke魔術方法,而不會產生錯誤

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

輸出結果

到此這篇關于php反序列化之魔術方法超詳細講解的文章就介紹到這了,更多相關php反序列化 內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: PHP
主站蜘蛛池模板: 宿松新闻网 宿松网|宿松在线|宿松门户|安徽宿松(直管县)|宿松新闻综合网站|宿松官方新闻发布 | 深圳天际源广告-形象堆头,企业文化墙,喷绘,门头招牌设计制作专家 | 杭州中央空调维修_冷却塔/新风机柜/热水器/锅炉除垢清洗_除垢剂_风机盘管_冷凝器清洗-杭州亿诺能源有限公司 | 润滑脂-高温润滑脂-轴承润滑脂-食品级润滑油-索科润滑油脂厂家 | 上海办公室设计_办公楼,写字楼装修_办公室装修公司-匠御设计 | KBX-220倾斜开关|KBW-220P/L跑偏开关|拉绳开关|DHJY-I隔爆打滑开关|溜槽堵塞开关|欠速开关|声光报警器-山东卓信有限公司 | 南京种植牙医院【官方挂号】_南京治疗种植牙医院那个好_南京看种植牙哪里好_南京茀莱堡口腔医院 尼龙PA610树脂,尼龙PA612树脂,尼龙PA1010树脂,透明尼龙-谷骐科技【官网】 | 掺铥光纤放大器-C/L波段光纤放大器-小信号光纤放大器-合肥脉锐光电技术有限公司 | 袋式过滤器,自清洗过滤器,保安过滤器,篮式过滤器,气体过滤器,全自动过滤器,反冲洗过滤器,管道过滤器,无锡驰业环保科技有限公司 | 酒吧霸屏软件_酒吧霸屏系统,酒吧微上墙,夜场霸屏软件,酒吧点歌软件,酒吧互动游戏,酒吧大屏幕软件系统下载 | 砂磨机_立式纳米砂磨机_实验室砂磨机-广州儒佳化工设备厂家 | 比士亚-专业恒温恒湿酒窖,酒柜,雪茄柜的设计定制 | 翅片管换热器「型号全」_厂家-淄博鑫科环保 | 膜结构车棚|上海膜结构车棚|上海车棚厂家|上海膜结构公司 | 南京种植牙医院【官方挂号】_南京治疗种植牙医院那个好_南京看种植牙哪里好_南京茀莱堡口腔医院 尼龙PA610树脂,尼龙PA612树脂,尼龙PA1010树脂,透明尼龙-谷骐科技【官网】 | 海水晶,海水素,海水晶价格-潍坊滨海经济开发区强隆海水晶厂 | 水冷式工业冷水机组_风冷式工业冷水机_水冷螺杆冷冻机组-深圳市普威机械设备有限公司 | 成都顶呱呱信息技术有限公司-贷款_个人贷款_银行贷款在线申请 - 成都贷款公司 | 西安文都考研官网_西安考研辅导班_考研培训机构_西安在职考研培训 | 信阳市建筑勘察设计研究院有限公司| 水轮机密封网 | 水轮机密封产品研发生产厂家 | 【铜排折弯机,钢丝折弯成型机,汽车发泡钢丝折弯机,线材折弯机厂家,线材成型机,铁线折弯机】贝朗折弯机厂家_东莞市贝朗自动化设备有限公司 | 氢氧化钙设备, 氢氧化钙生产线-淄博惠琛工贸有限公司 | 农业四情_农业气象站_田间小型气象站_智慧农业气象站-山东风途物联网 | 圆周直径尺-小孔内视镜-纤维研磨刷-东莞市高腾达精密工具 | 中国品牌排名投票_十大品牌榜单_中国著名品牌【中国品牌榜】 | 便民信息网_家电维修,家电清洗,开锁换锁,本地家政公司 | 海尔生物医疗四川代理商,海尔低温冰箱四川销售-成都壹科医疗器械有限公司 | 证券新闻,热播美式保罗1984第二部_腾讯1080p-仁爱影院 | B2B网站_B2B免费发布信息网站_B2B企业贸易平台 - 企资网 | 金属检测机_金属分离器_检针验针机_食品药品金属检探测仪器-广东善安科技 | 真空泵维修保养,普发,阿尔卡特,荏原,卡西亚玛,莱宝,爱德华干式螺杆真空泵维修-东莞比其尔真空机电设备有限公司 | 物联网卡_物联网卡购买平台_移动物联网卡办理_移动联通电信流量卡通信模组采购平台? | 钢格板|镀锌钢格板|热镀锌钢格板|格栅板|钢格板|钢格栅板|热浸锌钢格板|平台钢格板|镀锌钢格栅板|热镀锌钢格栅板|平台钢格栅板|不锈钢钢格栅板 - 专业钢格板厂家 | 大学食堂装修设计_公司餐厅效果图_工厂食堂改造_迈普装饰 | 整车VOC采样环境舱-甲醛VOC预处理舱-多舱法VOC检测环境仓-上海科绿特科技仪器有限公司 | 上海阳光泵业制造有限公司 -【官方网站】| 通信天线厂家_室分八木天线_对数周期天线_天线加工厂_林创天线源头厂家 | 北京燃气公司 用户服务中心| 低气压试验箱_高低温低气压试验箱_低气压实验箱 |林频试验设备品牌 | BHK汞灯-百科|上海熙浩实业有限公司 |