• 技术文章 >后端开发 >php教程

    基于PHP实现的事件机制实例分析_php技巧

    2016-05-16 20:13:27原创551
    本文实例讲述了基于PHP实现的事件机制。分享给大家供大家参考。具体分析如下:

    内置了事件机制的语言不多,php也没有提供这样的功能。事件(Event)说简单了就是一个Observer模式,实现起来很容易。但是有所不同的是,事件的监听者谁都可以加,但是只能由直接包含它的对象触发。这就有一点点难度了。php有一个debug_backtrace函数,可以得到当前的调用栈,由此可以找到判断调用事件触发函数的对象是不是直接包含它的对象的办法。

    <?php
    /**
    * 事件
    *
    * @author xiezhenye 
    * @since 2007-7-20
    */
    class Event {
      private $callbacks = array();
      private $holder;
      function __construct() {
        $bt = debug_backtrace();
        if (count($bt) < 2) {
          $this->holder = null;
          return;
        }
        $this->holder = &$bt[1]['object'];
      }
      function attach() {
        $args = func_get_args();
        switch (count($args)) {
          case 1:
            if (is_callable($args[0])) {
              $this->callbacks[]= $args[0];
              return;
            }
            break;
          case 2:
            if (is_object($args[0]) && is_string($args[1])) {
              $this->callbacks[]= array(&$args[0], $args[1]);
            }
            return;
          default:
            return;
        }
      }
      function notify() {
        $bt = debug_backtrace();
        if ($this->holder && 
            ((count($bt) >= 2 && $bt[count($bt) - 1]['object'] !== $this->holder)
            || (count($bt) < 2))) {
          throw(new Exception('Notify can only be called in holder'));
        }
        foreach ($this->callbacks as $callback) {
          $args = func_get_args();
          call_user_func_array($callback, $args);
        }
      }
    }
    
    

    希望本文所述对大家的php程序设计有所帮助。

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:PHP 事件机制
    上一篇:php实现的验证码文件类实例_php技巧 下一篇:php使用MySQL保存session会话的方法_php技巧
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• 详细介绍PHP中时间处理类Carbon的用法• 分享一个neo4j(图形数据库)的PHP库!• 一文聊聊php5.4的特性【总结】• PHP常量两种定义方法:define和const有什么区别• PHP商城那个好? 2022年十大开源PHP商城【分享】
    1/1

    PHP中文网