首頁 > 後端開發 > php教程 > PHP实现事件机制范例分析

PHP实现事件机制范例分析

WBOY
發布: 2016-06-13 12:22:29
原創
810 人瀏覽過

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);    }  }}
登入後複製
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板