亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

Yii框架核心組件類實例詳解

2024-05-05 00:10:49
字體:
來源:轉載
供稿:網友

本文實例講述了Yii框架核心組件類。分享給大家供大家參考,具體如下:

CComponent類為YII框架的基于組件和事件驅動編程提供了基礎,YII框架中的大部分類都將CComponent類作為基類。

CComponent類為它的子類提供3個特性:

1、成員變量擴展

通過定義兩個成員函數(getXXX/setXXX)來定義一個成員變量,比如:

public function getText() {…}public function setText {…}

這樣就相當于定義了一個$text成員變量,可以這樣調用

$a=new CComponent;$a=$component->text; // 等價于$a=$component->getText();$component->text='abc'; // 等價于$component->setText(‘abc');

CComponent是通過魔術方法__get和__set來實現“成員變量擴展”特性的,如果對類本身不存在的成員變量進行操作時,php會調用這個類 的__get和__set方法來進行處理。CComponent利用這兩個魔術方法實現了“成員變量擴展”特性。下圖描述了一個CComponent的子 類,它增加了active和sessionName兩個成員變量,該圖描述了對于這兩個成員變量的調用流程。

Yii,核心組件

面向對象編程中直接定義一個成員變量就可以了,為什么CComponent要通過定義2個函數來實現一個成員變量呢?一個主要得原因是需要對成員變 量進行“延時加載”,一般情況下類的成員變量是在構造函數或者初始化函數進行統一賦值,但是在一次web請求的處理過程中不是每個成員變量都會被使用,比 如App類中定義了兩個成員變量:$cache和$db($cache是一個緩存對象,$db是一個數據庫鏈接對象),這兩個對象在App類初始化的時候 創建,但是一個web網站的有些頁面,它內容可以通過緩存獲取,那么數據庫鏈接對象其實就不需要創建。如果將App定義為CComponent的子類,在 App類中定義兩個方法:getCache/getDb,這樣就可以做到第一次使用db成員變量的時候,才調用getDb函數來進行數據庫鏈接的初始化, 從而實現延時加載——即在第一次使用時進行初始化。雖然延時加載會增加一次函數調用,但是可以減少不必要的成員變量的初始化(總體上其實是提升了網站的訪 問速度),而且可以使得我們的代碼更加易維護、易擴展。

延時加載應該是“成員變量擴展”特性的最重要的用途,當然這個特性還會有其它用途,想一想,當你操作一個成員變量的時候,你其實是在調用getXXX和setXXX成員函數,你是在調用一段代碼!

2、事件模型

事件模型就是設計模式中的“觀察者模式”:當對象的狀態發生了變化,那么這個對象可以將該事件通知其它對象。

為了使用事件模型,需要實現這三個步驟:1、定義事件;2、注冊事件句柄;3、觸發事件。
CComponent的子類通過定義一個以on打頭的成員函數來定義一個事件,比如:public function onClick(){…},接著通過調用attachEventHandler成員函數來注冊事件句柄(可以注冊多個事件句柄),最后通過調用 raiseEvent來觸發事件。

CComponent類使用一個私有的成員變量來保存事件以及處理該事件的所有句柄,該成員變量可以看作一個hash表,hash表的key是事件的名稱,hash表的value是事件處理函數鏈表。

Yii,核心組件

3、行為類綁定

有兩種辦法可以對類添加特性:1、直接修改這個類的代碼,添加一些成員函數和成員變量;2、派生,通過子類來擴展。很明顯第二種方法更加易維護、易擴展。如果需要對一個類添加多個特性(多人在不同時期),那么需要進行多級派生,這顯然加大了維護成本。

CComponent使用一種特殊的方式對類信息擴展——行為類綁定。行為類是一個CBehavior的子類,CComponent可以將一個或者多個 CBehavior類的成員函數和成員變量添加到自己身上,并且在不需要的時候卸載掉某些CBehavior類。下面是一個簡單的例子:

//計算器類class Calculator extends CBehavior{public function add($x, $y) { return $x + $y; }public function sub($x, $y) { return $x – $y; }…}$comp = new CComponent();//為我的類添加計算器功能$comp->attachbehavior(‘calculator', new Calculator());$comp->add(2, 5);$comp->sub(2, 5);

CComponent通過__get、__set和__call這3個魔術方法來實現“行為類綁定”這個特性,當調用CComponent類不存在的成員 變量和成員方法的時候,CComponent類會通過這三個魔法方法在“動態綁定的行為對象”上進行查找。即將不存在的成員變量和成員方法路由到“動態綁 定對象”上。

Yii,核心組件

可以用3句話來總結CComponent類的特性:

1、 更好的配置一個對象,當設置對象的成員變量的時候,其實是運行一段代碼;
2、 更好的監聽一個對象,當對象的內部狀態發生變化的時候,其它對象可以得到通知;
3、 更好的擴展一個對象,可以給一個對象增加成員變量和成員函數,還能監聽這個對象的狀態。

希望本文所述對大家基于Yii框架的PHP程序設計有所幫助。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲一区久久久| 亚洲一区美女视频在线观看免费| 欧美电影免费在线观看| 国产日本欧美一区| 午夜精品在线视频| 尤物精品国产第一福利三区| 欧美日韩免费看| 在线国产精品视频| 成人乱色短篇合集| 91久久久久久久| 美女久久久久久久| 一本色道久久88综合亚洲精品ⅰ| 欧美激情一级欧美精品| 青青青国产精品一区二区| 96精品久久久久中文字幕| 一本色道久久综合狠狠躁篇怎么玩| 国产精品电影久久久久电影网| 欧美成人在线免费视频| 欧美www视频在线观看| 日韩精品视频免费在线观看| 成人欧美一区二区三区黑人孕妇| 日韩中文娱乐网| 国产91在线视频| 久久综合色影院| 亚洲深夜福利网站| 精品亚洲男同gayvideo网站| 日本欧美一级片| 久久久国产一区二区三区| 国内精品模特av私拍在线观看| 91干在线观看| 国产午夜精品一区理论片飘花| 久久影视免费观看| 中国china体内裑精亚洲片| 午夜剧场成人观在线视频免费观看| 成人国产亚洲精品a区天堂华泰| 日韩美女免费视频| 欧美日韩国内自拍| 欧美性少妇18aaaa视频| 亚洲第一精品夜夜躁人人躁| xxxxxxxxx欧美| 欧美日韩亚洲视频一区| 中文字幕精品www乱入免费视频| 国产精品视频一区二区高潮| 日韩在线观看免费高清完整版| 国产精品一区二区久久精品| 6080yy精品一区二区三区| 国产精品精品久久久| 色999日韩欧美国产| 国产在线高清精品| 欧美精品久久久久久久免费观看| 中文字幕精品一区二区精品| 国产欧美一区二区三区四区| 国产97色在线| 欧美在线中文字幕| 青青草原成人在线视频| 欧美与欧洲交xxxx免费观看| 亚洲视频在线播放| 美女视频黄免费的亚洲男人天堂| 色综合久久天天综线观看| 亚洲电影免费在线观看| 成人久久久久爱| 亚洲欧美国产精品久久久久久久| 精品国产鲁一鲁一区二区张丽| 日韩不卡在线观看| 亚洲www在线观看| 欧美日韩电影在线观看| 中文字幕日韩在线播放| 亚洲性视频网站| 国产精品吊钟奶在线| 国产亚洲精品91在线| www.色综合| 中文字幕亚洲自拍| 日韩在线中文字幕| 国产欧美日韩精品专区| 91网站免费看| 粗暴蹂躏中文一区二区三区| 成人精品一区二区三区| 精品久久久久久中文字幕一区奶水| 日韩免费精品视频| 九九热最新视频//这里只有精品| 日韩中文在线不卡| 91在线视频一区| 国产精品一区二区在线| 久久久久国产精品www| 国产亚洲精品久久| 日韩av网站在线| 欧美成人激情视频| 国产成人综合av| 538国产精品一区二区免费视频| 97福利一区二区| 国产视频丨精品|在线观看| 中文字幕免费精品一区| 久久精视频免费在线久久完整在线看| 中文字幕亚洲二区| 91香蕉国产在线观看| 夜色77av精品影院| 97视频在线免费观看| 欧美丰满老妇厨房牲生活| 久久久久日韩精品久久久男男| 欧美精品免费播放| 日韩在线视频导航| 精品日韩美女的视频高清| 色与欲影视天天看综合网| 日韩精品在线看| 精品福利在线视频| 亚洲欧美激情精品一区二区| 日韩av123| 国产精品亚洲自拍| 最好看的2019年中文视频| 97精品一区二区三区| 亚洲欧美中文日韩在线v日本| 中文字幕日韩视频| 国产精品成人va在线观看| 一区二区三区视频观看| 国产福利视频一区二区| 国产日本欧美一区| 国产美女精品免费电影| 在线日韩av观看| 久久久久久国产三级电影| 国产激情久久久| 日韩hd视频在线观看| 自拍偷拍亚洲欧美| 色狠狠av一区二区三区香蕉蜜桃| 性欧美xxxx视频在线观看| 中文字幕久热精品在线视频| 色综合久久中文字幕综合网小说| 91av免费观看91av精品在线| 国内精品久久久久伊人av| 欧美中文在线视频| 欧美性xxxxxxx| 97视频在线观看视频免费视频| 青草青草久热精品视频在线观看| 97久久伊人激情网| 亚洲成人a**站| 国内精久久久久久久久久人| 精品亚洲国产成av人片传媒| 亚洲国产精品va在线看黑人| 日本最新高清不卡中文字幕| 国产精品大片wwwwww| 少妇精69xxtheporn| 亚洲国模精品一区| 久久久久久久久久久久av| 国产精品久久久久aaaa九色| 亚洲国产第一页| 久久成人精品一区二区三区| 成人在线激情视频| 91网站免费观看| 欧美在线中文字幕| 国产91亚洲精品| 国产中文日韩欧美| 欧美激情极品视频| 日本在线精品视频| 欧美性在线观看| 久久伊人91精品综合网站| 在线观看欧美www| 亚洲成人精品av| 亚洲美女喷白浆| 日本精品久久电影| 亚洲a中文字幕| 亚洲精品国产拍免费91在线| 啊v视频在线一区二区三区| 欧美福利小视频| 亚洲大胆人体在线| 亚洲欧美另类人妖|