您的位置:首页 > 编程语言 > PHP开发

YII2框架学习 扩展篇(二) 事件机制

2017-06-28 20:54 429 查看
今天学习YII框架的事件机制,某个对象可以抛出一些事件,而其他的对象可以监听这些事件,然后调用相应的方法。而具体的实现方式可以分为扫描式和绑定式。而YII框架使用的就是绑定式。下面来详细讲解一下。

所谓绑定式,是由事件执行时,通过Component类下的trigger()方法抛出事件,然后通过on()方法来绑定其他对象对此事件的反应。下面通过一个简单的猫叫老鼠跑的例子来说明。这个一个一对一的事件机制。

1.一个一对一的事件机制

cat.php

namespace vendor\animal;
use \yii\base\Component;
class MyEvent extends Event{
public $message;
}

class Cat extends Component{
public function shout(){
echo 'cat miao<br>';
$this->trigger('miao',$me);
}
}mouse.php
namespace vendor\animal;

class Mouse{
public function run(){
echo 'mouse running<br>';//老鼠跑事件
}
}控制器
namespace app\controllers;
use yii\web\Controller;
use vendor\animal\Cat;
use vendor\animal\Mouse;
use vendor\animal\Dog;
use \yii\base\Event;
class HelloController extends Controller{
public function actionAbout(){
$cat = new Cat;
$mouse = new Mouse;

$cat->on('miao',[$mouse,'run']);//为miao事件绑定老鼠跑事件

$cat->shout();
}
}输出为
miao

mouse running

2.带参数的事件

有的时候,事件需要参数才能让其他对象反应的,比如报警119,需要告知着火地点。可以通过trigger来写入事件信息。

cat.php

namespace vendor\animal;
use \yii\base\Component;
use \yii\base\Event;
class MyEvent extends Event{
public $message;
}

class Cat extends Component{
public function shout(){
echo 'cat miao<br>';//猫叫事件
$me = new MyEvent;
$me->message = 'hello<br>';//事件参数
$this->trigger('miao',$me);//抛出名为miao的事件,附上参数$me对象
}
}mouse.php
namespace vendor\animal;

class Mouse{
public function run($me){
echo $me->message;
echo 'mouse running<br>';//老鼠跑事件
}
}

输出

miao

hello

mouse running

3.触发多个事件
可以加上dog.php

namespace vendor\animal;

class Dog{
public function run($me){
echo $me->message;
echo 'dog catch<br>';
}
}

控制器加上
$cat->on('miao',[$dog,'run']);

要想接触绑定
$cat->off('miao',[$dog,'run']);

输出

miao

hello

mouse running

hello
dog catch

4.类触发事件

有的时候,不只是某只实例化的猫,只要是只猫叫就想让老鼠跑的话,可以这么写on

Event::on(Cat::className(),'miao',[$mouse,'run']);

而在应用主体在程序中像一条主线一样,在主线当时是用$app这个单例模式去触发各种各样的事件。这些事件又被需要的对象或程序所捕获,对它做出各种各样的一些处理。这样做的好处是在不改动原来的程序或主流逻辑的的情况下,就可以通过这些时间去完成各种各样的操作,让程序有更好的扩展性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  yii 事件机制 php