Yii框架组件的事件机制原理是什么/怎么用

  介绍

本篇内容主要讲解“Yii框架组件的事件机制原理是什么/怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Yii框架组件的事件机制原理是什么/怎么用”吧!

在深入分析Yii的运行之前,我们先来看一下Yii框架中一个很重要的机制,事件。

Yii官方参考文档关于组件事件的解释:

=======================================================================

组件事件是一些特殊的属性,它们使用一些称作事件句柄(事件处理程序)的方法作为其值。附加(分配)一个方法到一个事件将会引起方法在事件被唤起处自动被调用。因此,一个组件的行为可能会被一种在部件开发过程中不可预见的方式修改。

组件事件以> public  function  onclick事件($)   {   这个美元才能→raiseEvent (& # 39; onClicked& # 39;,,美元事件);   }

这里作为事件参数美元的事件是CEvent或其子类的实例。

我们可以附加一个方法到此事件,如下所示:

组件→美元onclick=美元回调;

这里的回调指美元向了一个有效的php回调。它可以是一个全局函数也可以是类中的一个方法。如果是后者,它必须以一个数组的方式提供:数组(美元)对象,& # 39;methodName& # 39;)。

事件句柄的结构如下:

function  methodName(事件)   {   ,……   }

这里的事件即美元描述事件的参数(它来源于raiseEvent()调用)。美元事件参数是CEvent或其子类的实例。至少,它包含了关于谁触发了此事件的信息。

从版本1.0.10开始,事件句柄也可以是一个PHP 5.3以后支持的匿名函数。例如,

组件→美元onclick=函数(事件),{   ,……   }

如果我们现在调用>/* *   ,,*,Raises  an 事件。   ,,*,却;能够method  represents 从而happening  of  an 事件只It 调用   ,,*,all  attached  handlers  for 从而事件。   ,,*,@param  string 从而event 名字   ,,*,@param  CEvent 从而event 参数   ,,*,@throws  CException  if 从而event  is  undefined 或是an  event  handler  is 无效。   ,,*/public 才能;function  raiseEvent(名称、事件美元)   {//才能事件名称同一小写化处理   ,,,函数名称=美元($名称);   ,,,//先查看成员变量是否有以此命名的事件   ,,,如果(收取($ this→_e[名字]美元))   ,,,{   ,,,,,//如果有,这个成员保存的是每一个事件处理器   ,,,,,//以数组的方式保存   ,,,,,foreach ($ this→_e[名字]美元,as 美元处理程序)   ,,,,,{   ,,,,,,,//如果事件处理器是一个字符串,那么就是一个全局函数   ,,,,,,,如果(is_string(处理器)美元)   ,,,,,,,,,call_user_func(事件处理程序,美元);   ,,,,,,,//如果不是,那么有可能是一个数组,该数组包含一个对象和方法名   ,,,,,,,//参考http://php.net/manual/en/function.is-callable.php   ,,,,,,,else 如果(is_callable(美元处理程序,真正的))   ,,,,,,,{   ,,,,,,,,,//,an 数组:,0,安康;对象,,1,安康;method 名字   ,,,,,,,,,列表(对象、方法)美元=$处理程序;   ,,,,,,,,,//如果对象是一个对象名   ,,,,,,,,,如果(is_string(对象)美元),//static  method 调用   ,,,,,,,,,,,call_user_func(事件处理程序,美元);   ,,,,,,,,,//判断对象是否有要调用的方法   ,,,,,,,,,else 如果(method_exists(对象、方法)美元)   ,,,,,,,,,,,对象→美元美元方法(事件);   ,,,,,,,,,   ,,,,,,,,,,,throw  new  CException (Yii: t (& # 39; yii& # 39; & # 39; Event “{}班。}{事件“,is  attached  with  an  invalid 处理程序   “{处理器}“# 39;公司,   ,,,,,,,,,,,,,数组(& # 39;{类}& # 39;=祝辞get_class(美元),& # 39;{事件}& # 39;=祝辞的名字,美元,& # 39;{处理器}& # 39;=祝辞美元处理程序[1])));   ,,,,,,,}   ,,,,,,,   ,,,,,,,,,throw  new  CException (Yii: t (& # 39; yii& # 39; & # 39; Event “{}班。}{事件“,is  attached  with  an  invalid 处理程序   “{处理器}“# 39;公司,   ,,,,,,,,,,,数组(& # 39;{类}& # 39;=祝辞get_class(美元),& # 39;{事件}& # 39;=祝辞的名字,美元,& # 39;{处理器}& # 39;=祝辞方法(处理程序)美元)));   ,,,,,,,//,stop  further  handling  if  param.handled  is  set 真实的   ,,,,,,,//如果想停止继续循环获取事件的处理程序//那么需要设置事件的处理为真实的   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

Yii框架组件的事件机制原理是什么/怎么用