首頁 > php教程 > PHP源码 > 用PHP实现的事件机制

用PHP实现的事件机制

PHP中文网
發布: 2016-05-25 17:14:39
原創
1082 人瀏覽過

php代码

<?php

/**
* 事件
*
* @author xiezhenye <xiezhenye@gmail.com>
* @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][&#39;object&#39;];
   }
   
   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][&#39;object&#39;] !== $this->holder)
                || (count($bt) < 2))) {
           throw(new Exception(&#39;Notify can only be called in holder&#39;));   
       }
       foreach ($this->callbacks as $callback) {
           $args = func_get_args();
           call_user_func_array($callback, $args);
       }
   }
}
登入後複製
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板