php监听事件的作用,php监听事件,php触发事件

逛公众号文章看到文章"php实现事件监听与触发的方法,你用过吗?",我就好奇了,php又不是asp.net的webform,哪里来的服务端事件监听。于是学习了一波。

先看下监听类:class Event

{

/**

* 监听列表

* @var array

*/

protected static $listens = [];

/**

* 事件监听

* @param $event

* @param $callback

* @param bool $once

* @return bool

*/

public static function listen($event, $callback, $once = false)

{

//检查是否可以调用

if (is_callable($callback) == false)

{

return false;

}

self::$listens[$event][] = [

'once' => $once,

'callback' => $callback

];

return true;

}

/**

* 事件移除

* @param $event

* @param null $index

*/

public static function remove($event, $index = null)

{

if ($index == null)

{

unset(self::$listens[$event]);

}

else

{

unset(self::$listens[$event][$index]);

}

}

/**

* 事件触发

*/

public static function trigger()

{

//提取参数和事件

$args = func_get_args();

if ($args == false)

{

return;

}

//获取事件

$event = array_shift($args);

$events = self::$listens;

if (isset($events[$event]) == false || $events == false)

{

return;

}

//循环调用

foreach ($events[$event] as $key => $item)

{

$callback = $item['callback'];

$item['once'] && self::remove($event, $key);

call_user_func_array($callback, $args);

}

}

}

再看下使用代码:/**

* 监听select事件

*/

Event::listen('select', function ($sql) {

echo "DB:select():" . $sql . PHP_EOL;

});

/**

* 监听update

*/

Event::listen('update', function ($sql) {

echo "DB:update():" . $sql . PHP_EOL;

}, true);

/**

* 触发select事件

*/

$sql = 'select *  from  member';

Event::trigger('select', $sql);

Event::trigger('select', $sql);

Event::trigger('select', $sql);

/**

* 触发update事件

*/

$sql = 'update member set age=16';

Event::trigger('update', $sql);

Event::trigger('update', $sql);

监听普通事件,可多次触发事件,如果监听我一次性事件,只能单次调用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值