Event.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. */
  21. private static $events = array();
  22. /**
  23. * 注册事件
  24. * @param string $event
  25. * @param callable $callback 可以是 方法|方法名|array(对象/对象类型, 方法名车)
  26. * @param bool $first 是否优先执行,以靠后设置的为准
  27. */
  28. public static function register($event, $callback, $first = false)
  29. {
  30. if (!isset(self::$events[$event])) {
  31. self::$events[$event] = array();
  32. }
  33. if ($first) {
  34. array_unshift(self::$events[$event], $callback);
  35. } else {
  36. self::$events[$event][] = $callback;
  37. }
  38. }
  39. /**
  40. * 触发事件(监听事件)
  41. * 不是引用传参方式,如有需要请使用triggerReference方法
  42. * @param name $event
  43. * @param array $params
  44. * @return boolean
  45. */
  46. public static function trigger($event, $params = array())
  47. {
  48. $params = is_array($params) ? $params : array($params); # 确保参数一定是数组
  49. if (isset(self::$events[$event])) {
  50. foreach (self::$events[$event] as $item) {
  51. if (true === call_user_func($item, $params)) {
  52. return true; # 事件返回true时不继续执行其余事件
  53. }
  54. }
  55. return false;
  56. }
  57. return true;
  58. }
  59. }