zoukankan      html  css  js  c++  java
  • PHP事件机制

    先用 3W1H(who what why how) 分析法的思路来解释一下 事件机制, 更重要的是, 这个有什么用.

    正常的程序执行, 或者说人的思维趋势, 都是按照 时间线性串行 的, 保持 连续性. 不过现实中会存在各种 打断, 程序也不是永远都是 就绪状态, 那么, 就需要有一种机制, 来处理可能出现的各种打断, 或者在程序不同状态之间切换.

    事件机制发展到现在, 有时候也算是一种预留手段, 根据你的经验在需要的地方 埋点, 方便之后 打补丁.

    swoft 的事件机制基于 PSR-14 实现, 高度内聚简洁.

    由三部分组成:

    • EventManager: 事件管理器
    • Event: 事件
    • EventHandler / Listener: 事件处理器/监听器

    执行流程:

    • 先生成 EventManager
    • 将 Event 和 EventHandler 注册到 EventManager
    • 触发 Event, EventManager 就会调用相应的 EventHandler

    使用起来就更加简单了:

    namespace SwoftEvent;
    
    class ListenerQueue implements IteratorAggregate, Countable
    {
        protected $store;
    
        /**
         * 优先级队列
         * @var SplPriorityQueue
         */
        protected $queue;
    
        /**
         * 计数器
         * 设定最大值为 PHP_INT_MAX == 300
         * @var int
         */
        private $counter = PHP_INT_MAX;
    
        public function __construct()
        {
            $this->store = new SplObjectStorage(); // Event 对象先添加都这里
            $this->queue = new SplPriorityQueue(); // 然后加入优先级队列, 之后进行调度
        }
        ...
    }
    

      

    稍微玩过 ACM 的人对 优先级队列 就不会陌生了, 基本所有 OJ 都有相关的题库. 不过 PHPer 不用太操心底层实现, 直接借助 SPL 库即可.

  • 相关阅读:
    bat命令2
    bat实现创建、复制、删除文件及文件夹
    bat命令1
    ckeditor使用教程
    统计SqlServer每张表内的数据量
    entiryFramework 事务控制
    jQuery验证控件jquery.validate.js使用说明
    asp.net中套用母版页之后的findcontrol
    SessionState
    窗体单例问题
  • 原文地址:https://www.cnblogs.com/sandea/p/10578249.html
Copyright © 2011-2022 走看看