>本文继续我们探索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中文网其他相关文章!