案例一、
創(chuàng)新互聯(lián)公司的客戶來自各行各業(yè),為了共同目標,我們在工作上密切配合,從創(chuàng)業(yè)型小企業(yè)到企事業(yè)單位,感謝他們對我們的要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。專業(yè)領域包括成都網(wǎng)站建設、成都網(wǎng)站設計、電商網(wǎng)站開發(fā)、微信營銷、系統(tǒng)平臺開發(fā)。
實踐目標:
1、PHP中__get的定義格式如下:public function __get(參數(shù)1) ,這里注意必須是2個__,名稱必須是__get,而且必須是要帶1個參數(shù),多一個少一個都不行
具體代碼如下:
<?php class Animal{ public function eat(){ } public function sleep(){ } // static public function staticFun(){ // echo "Animal中的staticFun執(zhí)行了<br/>"; // } //魔術方法 public function __get($name){ echo "自動執(zhí)行了Animal類中的__get方法,當前屬性為:{$name}<br/>"; } } $ani = new Animal(); ?>
運行結(jié)果為:
未報錯,說明語法正確
現(xiàn)在我們 多加個參數(shù)看下
<?php class Animal{ public function eat(){ } public function sleep(){ } // static public function staticFun(){ // echo "Animal中的staticFun執(zhí)行了<br/>"; // } //魔術方法 public function __get($name,$arg){ echo "自動執(zhí)行了Animal類中的__get方法,當前屬性為:{$name}<br/>"; } } $ani = new Animal(); $name = $ani->name; ?>
運行結(jié)果為:
Fatal error: Method Animal::__get() must take exactly 1 argument inD:\E-class\class-code\classing\index.php on line14
所以從結(jié)果可以看出,參數(shù)有且只能有一個,多一個少一個都不行
案例二、
實踐目標:
1、當調(diào)用不存在的屬性時,系統(tǒng)會自動觸發(fā)對象所在類的定義好的__get方法
具體代碼如下:
<?php class Animal{ public function eat(){ } public function sleep(){ } // static public function staticFun(){ // echo "Animal中的staticFun執(zhí)行了<br/>"; // } //魔術方法 public function __get($name){ echo "自動執(zhí)行了Animal類中的__get方法,當前屬性為:{$name}<br/>"; } } $ani = new Animal(); $name = $ani->name; ?>
運行結(jié)果如下:
自動執(zhí)行了Animal類中的__get方法,當前屬性為:name
我們發(fā)現(xiàn)其實我們沒有手動的去調(diào)用__get方法,就是說沒有寫成$ani->__get(),但是這個方法依然執(zhí)行了,因為什么呢?因為我們寫了$ani->name;而這個name方法沒有在類中定義,然后這個類中又定義了這個魔術方法,所以它就像魔術一樣,突然就被自動執(zhí)行了,而且我們__get中的參數(shù)就是這個屬性
這里一定要注意,是2個下劃線,不是一個,否則就不是魔術方法了,下面還是再來做下測試
<?php class Animal{ public function eat(){ } public function sleep(){ } // static public function staticFun(){ // echo "Animal中的staticFun執(zhí)行了<br/>"; // } //魔術方法 試著少寫一個_ public function _get($name){ echo "自動執(zhí)行了Animal類中的__get方法,當前屬性為:{$name}<br/>"; } } $ani = new Animal(); $name = $ani->name; ?>
運行結(jié)果如下:
Notice: Undefined property: Animal::$name in D:\E-class\class-code\classing\index.php on line 18
所以此刻就會報錯了,因為沒有__get的魔術方法了,所以一定要注意是2個下劃線,就好像構(gòu)造函數(shù)和析構(gòu)函數(shù)一樣,都是兩個下劃線
案例一、
實踐目標:
1、PHP中__set在類中定義格式如下 public function __set(屬性參數(shù)1,屬性對應的值的參數(shù)2),這里注意必須是2個__,名稱必須是__set,而且必須是要帶2個參數(shù),多一個少一個都不行
具體代碼如下:
<?php class Animal{ public function eat(){ } public function sleep(){ } //魔術方法 public function __set($name,$val){ echo "自動執(zhí)行了Animal類中的__set方法,當前屬性為:{$name},值為:{$val}<br/>"; } } $ani = new Animal(); ?>
運行結(jié)果為:
空白,說明沒有報錯
接下來,我們少一個參數(shù)看下
<?php class Animal{ public function eat(){ } public function sleep(){ } //魔術方法 public function __set($name){ echo "自動執(zhí)行了Animal類中的__set方法,當前屬性為:{$name},值為:{$val}<br/>"; } } $ani = new Animal(); ?>
運行結(jié)果為:
Fatal error: Method Animal::__set() must take exactly 2 arguments inD:\E-class\class-code\classing\index.php on line11
所以__set方法的參數(shù)有且只能是2個,一個是屬性名,一個是屬性要設置的值
案例二、
實踐目標:
1、當設置不存在的屬性時,系統(tǒng)會自動觸發(fā)對象所在類的定義好的__set方法
具體代碼如下:
<?php class Animal{ public function eat(){ } public function sleep(){ } //魔術方法 public function __set($name,$val){ echo "自動執(zhí)行了Animal類中的__set方法,當前屬性為:{$name},值為:{$val}<br/>"; } } $ani = new Animal(); $ani->name = "小狗"; ?>
運行結(jié)果為:
自動執(zhí)行了Animal類中的__set方法,當前屬性為:name,值為:小狗
我們發(fā)現(xiàn)其實我們沒有手動的去調(diào)用__set方法,也就是說沒有寫成$ani->__set(),但是這個方法依然執(zhí)行了,因為什么呢?因為我們寫了$ani->name = "小狗";;這個name屬性在類中沒有定義,然后這個類中又定義了這個魔術方法,所以它就像魔術一樣,突然就被自動執(zhí)行了
這里一定要注意,是2個下劃線,不是一個,否則就不是魔術方法了,下面還是再來做下測試
具體代碼如下:
<?php class Animal{ public function eat(){ } public function sleep(){ } //魔術方法 試著少寫一個_ public function _set($name,$val){ echo "自動執(zhí)行了Animal類中的__sett方法,當前屬性為:{$name},值為:{$val}<br/>"; } } $ani = new Animal(); $ani->name = "小狗"; ?>
運行結(jié)果如下:
空白了
所以說明沒有執(zhí)行__set魔術方法了,所以一定要記得是兩個__。
以上就是PHP魔術方法之__get,__set詳解(代碼實例)的詳細內(nèi)容,更多請關注創(chuàng)新互聯(lián)其它相關文章!
當前題目:PHP中get和set魔術方法的使用
分享網(wǎng)址:http://aaarwkj.com/article0/jpopoo.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設、動態(tài)網(wǎng)站、手機網(wǎng)站建設、標簽優(yōu)化、做網(wǎng)站、用戶體驗
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)