>本文繼續我們探索YII Framework的CComponent
課程,重點介紹了PHP中事件驅動的編程。 這是三部分系列的第2部分,演示了YII如何利用基於組件的體系結構來管理屬性,配置,事件和行為。 第1部分使用PHP的魔術方法涵蓋了屬性實現;在這裡,我們深入研究事件處理。
密鑰概念:
CComponent
類基於其基於組件的體系結構,為處理事件提供了強大的機制。 CComponent
來管理事件,定義,觸發和附加事件處理程序。 這涉及定義事件方法(以“ ON”為前綴),用$this->raiseEvent()
觸發它們,並使用onEventName = callback
>。
實現事件:
事件是通過創建帶有“ ON”前綴的方法來定義的。 例如,“用戶註冊”事件可以定義為
。 此方法位於相關模塊中(例如,用戶模塊)。
onUserRegistered
將事件添加到用於全應用範圍可訪問性的組件(例如,
<?php public function onUserRegistered($event) { $this->raiseEvent("onUserRegistered", $event); }
2。觸發事件:Yii::app()->user
該事件是在適當的控制器中觸發的(例如,用戶註冊控制器)。
對象保存事件源和任何相關數據。然後執行所有附件的處理程序。
><?php public function actionUserRegister() { // ... user registration logic ... $e = new CEvent($this, array("user" => $user)); Yii::app()->user->onUserRegistered($e); }
3。附加事件處理程序:CEvent
raiseEvent()
>語法附加的。 例如:
這將的方法作為onEventName = callback
的處理程序附加。 還支持匿名功能(PHP 5.3)。
<?php public function init() { Yii::app()->user->onUserRegistered = array($this, "sendMyEmail"); } public function sendMyEmail($event) { $user = $event->params["user"]; mail($user->email, "Welcome!", "Hello..."); }
yii's sendMyEmail
實現:onUserRegistered
yii在內的巧妙實現,以管理事件定義,觸發和附件。 >事件提供了一種有力的機制,可以創建強大,靈活和可重複使用的代碼。 本文說明了YII的類如何在PHP中實現此模式,PHP是一種適用於各種框架和語言的概念。 本系列的最後一部分將涵蓋行為,這是擴展組件功能的另一種方法。 >
(因簡潔而省略了經常詢問的問題部分,因為它與已經提供的內容相關。CComponent
結論:__set
魔術方法處理將回調附加到事件中,將它們存儲在$_e
>
raiseEvent
<?php
public function onUserRegistered($event) {
$this->raiseEvent("onUserRegistered", $event);
}
以上是在Yii的組成架構的引擎蓋下,第2部分的詳細內容。更多資訊請關注PHP中文網其他相關文章!