Yii2的深入学习--yii\base\Event 类
根据之前一篇文章,我们知道 Yii2 的事件分两类,一是类级别的事件,二是实例级别的事件。类级别的事件是基于 yii\base\Event 实现,实例级别的事件是基于 yii\base\Component 实现。
今天先来看下类级别事件的实现,代码是 yii\base\Event 类。
1 | <span style= "color: #000000;" >phpnamespace yii\base;</span><span style= "color: #008000;" > </span><span style= "color: #0000ff;" > class </span> Event <span style= "color: #0000ff;" > extends </span> <span style= "color: #0000ff;" >Object</span><span style= "color: #000000;" >{ </span><span style= "color: #008000;" > </span> <span style= "color: #0000ff;" > public </span> <span style= "color: #800080;" > $name </span><span style= "color: #000000;" >; </span><span style= "color: #008000;" > </span> <span style= "color: #0000ff;" > public </span> <span style= "color: #800080;" > $sender </span><span style= "color: #000000;" >; </span><span style= "color: #008000;" > </span> <span style= "color: #0000ff;" > public </span> <span style= "color: #800080;" > $handled </span> = <span style= "color: #0000ff;" >false</span><span style= "color: #000000;" >; </span><span style= "color: #008000;" > </span> <span style= "color: #0000ff;" > public </span> <span style= "color: #800080;" > $data </span><span style= "color: #000000;" >; </span><span style= "color: #008000;" > </span> <span style= "color: #0000ff;" > private </span> <span style= "color: #0000ff;" > static </span> <span style= "color: #800080;" > $_events </span> =<span style= "color: #000000;" > []; </span><span style= "color: #008000;" > </span> <span style= "color: #0000ff;" > public </span> <span style= "color: #0000ff;" > static </span> <span style= "color: #0000ff;" > function </span> on(<span style= "color: #800080;" > $class </span>, <span style= "color: #800080;" > $name </span>, <span style= "color: #800080;" > $handler </span>, <span style= "color: #800080;" > $data </span> = <span style= "color: #0000ff;" >null</span>, <span style= "color: #800080;" > $append </span> = <span style= "color: #0000ff;" >true</span><span style= "color: #000000;" >) { </span><span style= "color: #008000;" >
|
Copy after login
通过上面代码可以看出,类级别的 Event,其本质就是在 Event 类中的 $_events 变量中存储事件,触发事件的时候,只需将其取出,执行即可。
$_events里面的数据结构大概如下:
1 | <span style= "color: #000000;" >[ </span> 'add' =><span style= "color: #000000;" > [ </span> 'Child' =><span style= "color: #000000;" > [ [</span><span style= "color: #0000ff;" > function </span> (<span style= "color: #800080;" > $event </span>) { ... }, <span style= "color: #800080;" > $data </span>],<span style= "color: #000000;" > [[</span><span style= "color: #800080;" > $object </span>, 'handleAdd' ], <span style= "color: #0000ff;" >null</span>],<span style= "color: #000000;" > [[</span> 'ChildClass' , 'handleAdd' ], <span style= "color: #800080;" > $data </span>],<span style= "color: #000000;" > [</span> 'handleAdd' , <span style= "color: #800080;" > $data </span><span style= "color: #000000;" >] ]</span>, 'ChildClass' =><span style= "color: #000000;" > [ </span>...<span style= "color: #000000;" > ] ]</span>, 'delete' =><span style= "color: #000000;" > [ </span>...<span style= "color: #000000;" > ]]</span>
|
Copy after login
之后讲到yii\base\Component类时,我们会再来说一下实例级别的事件。
对 Yii2 源码有兴趣的同学可以关注项目 yii2-2.0.3-annotated,现在在上面已经添加了不少关于 Yii2 源码的注释,之后还会继续添加~
有兴趣的同学也可以参与进来,提交 Yii2 源码的注释。