首頁  >  文章  >  後端開發  >  PHP实现事件机制范例分析

PHP实现事件机制范例分析

WBOY
WBOY原創
2016-06-13 12:22:29752瀏覽

PHP实现事件机制实例分析

PHP实现事件机制实例分析


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

<?php/*** 事件* @edit http://www.lai18.com * @author xiezhenye <[email&#160;protected]>*/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);    }  }}
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn