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

首頁 > 編程 > PHP > 正文

對于Yii框架組件和事件行為管理的解析

2020-03-22 20:30:38
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了html' target='_blank'>Yii框架組件和事件行為管理,詳細分析了Yii框架組件管理與行為管理的原理與使用技巧,需要的朋友可以參考下

本文實例講述了Yii框架組件和事件行為管理。分享給大家供大家參考,具體如下:

Yii是一個基于組件、用于開發大型 Web 應用的高性能 PHP 框架。CComponent幾乎是所有類的基類,它控制著組件與事件的管理,其方法與屬性如下,私有變量$_e數據存放事件(evnet,有些地方叫hook),$_m數組存放行為(behavior)。

組件管理

YII是一個純oop框架,很多類中的成員變量的受保護或者私有的,CComponent中利用php中的魔術方法__get(),__set()來訪問和設置屬性,但這些方法的作用遠不指這些。下面用__get()來說明

public function __get($name) $getter= get .$name; if(method_exists($this,$getter)) return $this- $getter(); else if(strncasecmp($name, on ,2)===0 method_exists($this,$name)) // duplicating getEventHandlers() here for performance $name=strtolower($name); if(!isset($this- _e[$name])) $this- _e[$name]=new CList; return $this- _e[$name]; else if(isset($this- _m[$name])) return $this- _m[$name]; else if(is_array($this- _m)) foreach($this- _m as $object) if($object- getEnabled() (property_exists($object,$name) || $object- canGetProperty($name))) return $object- $name; throw new CException(Yii::t( yii , Property {class}.{property} is not defined. , array( {class} = get_class($this), {property} = $name)));}

當CComponent或者其子類對象實例$obj- name的時候,__get($name)方法:

1、首先判斷實例中是否有getName()方法,如果有則返回 ,如果沒有執行第2步

2、判斷是否是以on開頭的,以on開頭的一般都是CComponent子類中預留的事件,用與掛在事件,通過method_exists($this,$name)判斷該name是否存在類的實例中,如果存在,返回事件,否則執行第3步

3、如果name存在行為數組中,返回改行為,如果不存在,執行第4步

4、遍歷行為數組,數組中行為是CBehavior子類的實例,而CBehavior又是CComponent中子類,所以用遞歸的方法獲取行為中的方法,如果沒有,執行第5步

5、拋出異常:請求的屬性不存在。

在CComponent子類中可以重載__get()方法,如在CModule中加入了獲取組件的判斷。這就注意一個問題了屬性和組件名最好不要重名,因為程序會優先加載組件,可能得到的不是我們想要的屬性,如果必須重名的話,就要用getter獲取屬性。

public function __get($name) if($this- hasComponent($name)) return $this- getComponent($name); else return parent::__get($name);}

關于組件的加載與創建,上篇YII框架分析筆記1:YII執行流程中的第3點中有個疑問:注冊框架核心組件的時候一下子加載這么多,是不是影響性能呢?其實沒有,注冊的時候只是把組件和其對應的配置用鍵值對的形式保存在數組中(預加載的除外),當用到時候才像上面那樣去創建組件,會通過YIIBase中的createComponent()方法創建,并初始化。通過CModule或其子孫類(如CWebApplication)調用__get()或getComponent()獲取組件時,CModule通過$_components數組建立對象池,確保每個組件在一次請求中只實例化一次。

事件行為管理

事件相當于對一個組件的擴展或者插件,以組件中預留的鉤子實現組件內部調用外部、外部對組件部分控制。在CComponent子類中可以定義以on開頭的方法為事件,類似于js中的onclick、onchange等,其實原理差不多。所有事件是與CComponent在同一文件中CEvent的子類。

/*** Raised right BEFORE the application processes the request.* @param CEvent $event the event parameterpublic function onBeginRequest($event) $this- raiseEvent( onBeginRequest ,$event);* Runs the application.* This method loads static application components. Derived classes usually overrides this* method to do more application-specific tasks.* Remember to call the parent implementation so that static application components are loaded.public function run() if($this- hasEventHandler( onBeginRequest )) $this- onBeginRequest(new CEvent($this)); $this- processRequest(); if($this- hasEventHandler( onEndRequest )) $this- onEndRequest(new CEvent($this));}

比如在CApplication中調用run()方法在處理請求之前先判斷外部是否傳人onBeginRequest事件的句柄,如果有則通過onBeginRequest($event)方法調用CComponent中的raiseEvent()方法執行句柄中的函數或者方法。

行為是事件的升級版,所有的行為都是CBehavior的子類。分析上面的__get()方法分析第4步可以看出來行為的作用是完全擴展組件的特性,可以是屬性、方法、事件甚至行為,這樣使程序開發更加靈活。

行為的另一個作用是將相似事件句柄放在一起,在行為執行attach()方法的時候會將events()方法中返回的事件句柄綁定,這樣做達到方面管理和擴展的目的。比如CModelBehavior中將model相關的事件集中起來,便于其子類的復用,當我們需求為model添加行為的時候可以繼承它。

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP !

相關推薦:

關于yii分頁組件的用法

關于Yii數據模型中rules類驗證器的用法

以上就是對于Yii框架組件和事件行為管理的解析的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产欧美一区二区三区同亚洲| 久久久久久网址| 久久久久久久久久婷婷| 久久久久久久久久久av| 亚洲精品久久在线| 国产丝袜一区二区三区| 91在线视频导航| 亚洲石原莉奈一区二区在线观看| 亚洲欧美另类在线观看| 成人免费高清完整版在线观看| 色av中文字幕一区| 夜夜嗨av一区二区三区四区| 日韩高清人体午夜| 欧美精品午夜视频| 亚洲欧美日韩一区二区在线| 国产噜噜噜噜久久久久久久久| 欧美激情第一页xxx| 亚洲香蕉成人av网站在线观看| 综合国产在线观看| 国产成人精品国内自产拍免费看| 欧美精品久久久久久久久| 亚洲a级在线观看| 日韩av一卡二卡| 高跟丝袜欧美一区| 国产精品日韩欧美大师| 欧美韩日一区二区| 欧美日韩加勒比精品一区| 久热精品视频在线| 亚洲国产成人精品电影| 亚洲精品v欧美精品v日韩精品| 国产精品日韩一区| 欧美激情精品久久久久久免费印度| 亚洲国产精品系列| 国产日韩精品电影| 国产精品国模在线| 久久久免费电影| 国产一区二区三区18| 亚洲一区制服诱惑| 欧美日韩亚洲国产一区| 午夜精品一区二区三区在线播放| 福利微拍一区二区| 成人免费视频xnxx.com| 国产成人久久久| 国产精品www色诱视频| 日韩av三级在线观看| 欧美成人精品在线视频| 亚洲jizzjizz日本少妇| 国产97色在线|日韩| 亚洲色图国产精品| 91社影院在线观看| 亚洲成人av片在线观看| 欧美日韩免费观看中文| 国产裸体写真av一区二区| 国产在线播放不卡| 国产一区二区三区18| 国产亚洲综合久久| 中文字幕自拍vr一区二区三区| 日韩中文字幕第一页| 日本成熟性欧美| 国产一区二区在线免费视频| 久久综合久久八八| 久久97久久97精品免视看| 亚洲天堂网站在线观看视频| 成人天堂噜噜噜| 亚洲欧美一区二区三区在线| 国产区精品在线观看| 91九色蝌蚪国产| 精品国产一区二区三区久久久| 91九色视频导航| 久久亚洲精品小早川怜子66| 国产日韩欧美夫妻视频在线观看| 91高清视频免费| 欧美性猛交xxxx乱大交蜜桃| 欧美最猛性xxxxx免费| 欧美肥老妇视频| 国产精品在线看| 国产精品久久久久久五月尺| 欧美国产日韩一区二区| 日韩av片免费在线观看| 亚洲国产精品成人av| 日韩有码片在线观看| 国产欧美中文字幕| 国产精品免费观看在线| 亚洲精品成人久久电影| 亚洲综合小说区| 亚洲精品99久久久久| 欧美裸身视频免费观看| 国产成人精品电影久久久| 久久精品精品电影网| 国产欧美精品一区二区三区-老狼| 成人激情春色网| 午夜精品久久久久久久久久久久| 午夜精品一区二区三区av| 国产欧美精品一区二区三区-老狼| 国产欧美 在线欧美| 日韩精品一区二区三区第95| 国产精品丝袜一区二区三区| 欧美精品电影在线| 久久网福利资源网站| 中文国产成人精品| 久久国产精品久久久久久久久久| 97视频在线播放| 2024亚洲男人天堂| 91久久国产综合久久91精品网站| 成人免费xxxxx在线观看| 色999日韩欧美国产| 久久久精品免费视频| 亚洲久久久久久久久久| 色综合亚洲精品激情狠狠| 国产v综合ⅴ日韩v欧美大片| 欧美一区第一页| 色噜噜亚洲精品中文字幕| 国产精品福利小视频| 久久精品免费播放| 精品视频在线观看日韩| 欧美性xxxxxxxxx| 欧美视频一区二区三区…| 国产精品av网站| 精品精品国产国产自在线| 久久99精品国产99久久6尤物| 日韩经典中文字幕| 欧美在线视频一区| 一本久久综合亚洲鲁鲁| 久久精品这里热有精品| 国产精品视频久久久久| 欧美中文字幕在线观看| 欧美另类老肥妇| 91av成人在线| 91久久精品国产91久久| 亚洲男人的天堂在线播放| 国产欧美日韩高清| 91免费电影网站| 久久精品国产99国产精品澳门| 亚洲成人在线视频播放| 正在播放国产一区| 在线视频免费一区二区| 国产日韩欧美一二三区| 欧美性在线视频| 92国产精品久久久久首页| 欧美丰满少妇xxxxx做受| 91日本在线视频| 黄色成人av网| 国产精品一区二区三| 国产成人在线视频| 97视频在线播放| 欧美视频专区一二在线观看| 日韩精品免费看| 亚洲香蕉成人av网站在线观看| 国产精品久久久久久久久影视| 欧美高跟鞋交xxxxxhd| 国产91精品久久久久久久| 欧美性高潮床叫视频| 国产精品1区2区在线观看| 国内精品国产三级国产在线专| 亚洲最大的成人网| 91在线免费网站| 欧美怡红院视频一区二区三区| 一区二区福利视频| 日韩精品在线免费观看视频| 亚洲四色影视在线观看| 日韩中文在线中文网在线观看| 日韩一区二区精品视频| 一本一道久久a久久精品逆3p| 亚洲乱码一区二区|