虽然PHP语言本身不能实现异步事件,但是并不代表事件在PHP中不是
一个非常有效的代码注入方式。TinkSNS中就有钩子,允许用户在不修
改主体业务代码的时候执行不同的操作。钩子对于一些活动,比如充
值送积分,充值打折扣。不同的活动,不一样,如果每次都要修改充
值业务的主体代码,不仅麻烦,而且容易产生bug。因此可以在充值成
功之后触发充值成功的事件,在事件处理中去处理相应的返现,优惠打
折操作。
看一下Event类的主体结构
class Event extends Object{
public $name;
public $sender;
public $handled = false;
private static $_events = [];
public static function on($class, $name, $handler, $data = null, $append = true) {
}
public static function off($class, $name, $handler = null) {
}
public static function offAll() {}
public static function hasHandlers($class, $name) {
}
public static function trigger($class, $name, $event = null) {
}
}
整个类非常简单。事件绑定,事件解绑,解绑所有事件,是否绑定事件,触发事件五个函数,实现
事件处理机制。所有通过静态方法绑定的事件都存储在静态变量_events中。
1.事件绑定
p