Event.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?php
  2. namespace loyalsoft;
  3. /**
  4. * 事件类
  5. * 用法: * Ps.在WebAPI模式下基本没啥用处 *
  6. * 注册事件: Event::register('ON_USER_ADD',function($data){
  7. * // 这里可以做一些事情
  8. * var_dump($data);
  9. * });
  10. * 触发事件: Event::trigger('ON_USER_ADD',array('userInfo'=>$userInfo,'result'=>&$result));
  11. * @version
  12. * 1.0.0 Created at 2017-3-24. by --gwang
  13. * @author gwang (mail@wanggangzero.cn)
  14. * @copyright ? 2017-3-24, SJZ LoyalSoft Corporation & gwang. All rights reserved.
  15. */
  16. class Event {
  17. /**
  18. * 事件绑定记录
  19. */
  20. private static $events = array();
  21. /**
  22. * 注册事件
  23. * @param string $event
  24. * @param callable $callback 可以是 方法|方法名|array(对象/对象类型, 方法名车)
  25. * @param bool $first 是否优先执行,以靠后设置的为准
  26. */
  27. public static function register($event, $callback, $first = false) {
  28. if (!isset(self::$events[$event])) {
  29. self::$events[$event] = array();
  30. }
  31. if ($first) {
  32. array_unshift(self::$events[$event], $callback);
  33. } else {
  34. self::$events[$event][] = $callback;
  35. }
  36. }
  37. /**
  38. * 触发事件(监听事件)
  39. * 不是引用传参方式,如有需要请使用triggerReference方法
  40. * @param name $event
  41. * @param array $params
  42. * @return boolean
  43. */
  44. public static function trigger($event, $params = array()) {
  45. $params = is_array($params) ? $params : array($params); # 确保参数一定是数组
  46. if (isset(self::$events[$event])) {
  47. foreach (self::$events[$event] as $item) {
  48. if (true === call_user_func($item, $params)) {
  49. return true; # 事件返回true时不继续执行其余事件
  50. }
  51. }
  52. return false;
  53. }
  54. return true;
  55. }
  56. }